From ed33cfc653ea7558e340f7bad1cb35aa66743cc7 Mon Sep 17 00:00:00 2001 From: Salih Altun Date: Tue, 1 Jun 2021 09:29:42 +0300 Subject: [PATCH] Rename source and sink to empty set https://github.com/iVis-at-Bilkent/newt/issues/658 --- README.md | 2 +- sbgnviz.js | 50 +++++++++++----------- src/sbgn-extensions/sbgn-cy-renderer.js | 16 +++---- src/utilities/element-utilities-factory.js | 32 +++++++------- 4 files changed, 50 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 164f9f5e..2ff9a604 100644 --- a/README.md +++ b/README.md @@ -405,7 +405,7 @@ library of sbgnviz. Most users will not need to use this. It includes the follow * `getSbgnClass(ele)` Returns sbgnclass of the given element. If the parameter is a string return it by assuming that it is the sbgnclass itself. * `getPureSbgnClass(ele)` Returns sbgn class omitting the multimer information. * `canHaveUnitOfInformation(ele)` Returns whether the give element have unit of information. -* `isEmptySetClass(ele)` Returns wether the given element or string is of the special empty set/source and sink class. +* `isEmptySetClass(ele)` Returns wether the given element or string is of the special empty set class. * `isModulationArcClass(ele)` Returns whether the class of given element is a modulation arc as defined in PD specs. * `convertToRenderedPosition(modelPos, pan, zoom)` Returns rendered position of a given model position. * `getArrayLineStyle(ele)` Returns whether the line style is dashed or solid. diff --git a/sbgnviz.js b/sbgnviz.js index 3988c90f..0cd99725 100644 --- a/sbgnviz.js +++ b/sbgnviz.js @@ -1204,7 +1204,7 @@ module.exports = function () { }; var sbgnShapes = $$.sbgn.sbgnShapes = { - 'source and sink': true, + 'empty set': true, 'nucleic acid feature': true, 'complex': true, 'macromolecule': true, @@ -1503,7 +1503,7 @@ module.exports = function () { } }; - cyStyleProperties.types.nodeShape.enums.push('source and sink', 'nucleic acid feature', 'complex', 'macromolecule', 'simple chemical', 'biological activity', 'compartment'); + cyStyleProperties.types.nodeShape.enums.push('empty set', 'nucleic acid feature', 'complex', 'macromolecule', 'simple chemical', 'biological activity', 'compartment'); $$.sbgn.registerSbgnNodeShapes = function () { function generateDrawFcn(_ref2) { @@ -1634,7 +1634,7 @@ module.exports = function () { }; } - var shapeNames = ["simple chemical", "macromolecule", "complex", "nucleic acid feature", "source and sink", "biological activity", "compartment", "oldCompartment"]; + var shapeNames = ["simple chemical", "macromolecule", "complex", "nucleic acid feature", "empty set", "biological activity", "compartment", "oldCompartment"]; shapeNames.forEach(function (shapeName) { var plainDrawFcn = $$.sbgn.plainDraw[shapeName]; var plainIntersectLineFcn = $$.sbgn.plainIntersectLine[shapeName]; @@ -1727,16 +1727,16 @@ module.exports = function () { "macromolecule": $$.sbgn.drawRoundRectangle, "complex": $$.sbgn.drawComplex, "nucleic acid feature": $$.sbgn.drawBottomRoundRectangle, - "source and sink": $$.sbgn.drawEllipse, + "empty set": $$.sbgn.drawEllipse, "biological activity": $$.sbgn.drawBiologicalActivity, "compartment": $$.sbgn.drawBarrel, "oldCompartment": $$.sbgn.drawRoundRectangle }; // To define an extra drawing for the node that is rendered at the very end, // even after the node background image is drawn. - // E.g. cross lines of "source and sink" nodes. + // E.g. cross lines of "empty set" nodes. $$.sbgn.extraDraw = { - "source and sink": $$.sbgn.drawCrossLine + "empty set": $$.sbgn.drawCrossLine }; $$.sbgn.plainIntersectLine = { "simple chemical": function simpleChemical(centerX, centerY, width, height, x, y, padding) { @@ -1752,7 +1752,7 @@ module.exports = function () { "nucleic acid feature": function nucleicAcidFeature(centerX, centerY, width, height, x, y, padding) { return cyBaseNodeShapes["bottomroundrectangle"].intersectLine(centerX, centerY, width, height, x, y, padding); }, - "source and sink": function sourceAndSink(centerX, centerY, width, height, x, y, padding) { + "empty set": function emptySet(centerX, centerY, width, height, x, y, padding) { return cyBaseNodeShapes["ellipse"].intersectLine(centerX, centerY, width, height, x, y, padding); }, "biological activity": function biologicalActivity(centerX, centerY, width, height, x, y, padding) { @@ -1817,7 +1817,7 @@ module.exports = function () { "nucleic acid feature": function nucleicAcidFeature(x, y, padding, width, height, centerX, centerY) { return cyBaseNodeShapes["bottomroundrectangle"].checkPoint(x, y, padding, width, height, centerX, centerY); }, - "source and sink": function sourceAndSink(x, y, padding, width, height, centerX, centerY) { + "empty set": function emptySet(x, y, padding, width, height, centerX, centerY) { return cyBaseNodeShapes["ellipse"].checkPoint(x, y, padding, width, height, centerX, centerY); }, "biological activity": function biologicalActivity(x, y, padding, width, height, centerX, centerY) { @@ -3981,7 +3981,7 @@ module.exports = function () { asSource: {}, asTarget: {} }, - "source and sink": { + "empty set": { asSource: { isAllowed: true }, @@ -4083,7 +4083,7 @@ module.exports = function () { asSource: {}, asTarget: {} }, - "source and sink": { + "empty set": { asSource: {}, asTarget: { isAllowed: true @@ -4185,7 +4185,7 @@ module.exports = function () { asSource: {}, asTarget: {} }, - "source and sink": { + "empty set": { asSource: { isAllowed: true }, @@ -4297,7 +4297,7 @@ module.exports = function () { asSource: {}, asTarget: {} }, - "source and sink": { + "empty set": { asSource: { isAllowed: true }, @@ -4407,7 +4407,7 @@ module.exports = function () { asSource: {}, asTarget: {} }, - "source and sink": { + "empty set": { asSource: { isAllowed: true }, @@ -4521,7 +4521,7 @@ module.exports = function () { asSource: {}, asTarget: {} }, - "source and sink": { + "empty set": { asSource: { isAllowed: true }, @@ -4633,7 +4633,7 @@ module.exports = function () { asSource: {}, asTarget: {} }, - "source and sink": { + "empty set": { asSource: { isAllowed: true }, @@ -4749,7 +4749,7 @@ module.exports = function () { asSource: {}, asTarget: {} }, - "source and sink": { + "empty set": { asSource: { isAllowed: true }, @@ -4861,7 +4861,7 @@ module.exports = function () { isAllowed: true } }, - "source and sink": { + "empty set": { asSource: {}, asTarget: {} }, @@ -5628,7 +5628,7 @@ module.exports = function () { elementUtilities.logicalOperatorTypes = ['and', 'or', 'not', 'delay']; elementUtilities.processTypes = ['process', 'omitted process', 'uncertain process', 'association', 'dissociation', 'phenotype']; elementUtilities.biologicalActivityTypes = ['biological activity', 'BA plain', 'BA unspecified entity', 'BA simple chemical', 'BA macromolecule', 'BA nucleic acid feature', 'BA perturbing agent', 'BA complex']; - elementUtilities.epnTypes = ['macromolecule', 'nucleic acid feature', 'simple chemical', 'source and sink', 'unspecified entity', 'perturbing agent', 'complex', 'nucleic acid feature multimer', 'macromolecule multimer', 'simple chemical multimer', 'complex multimer']; + elementUtilities.epnTypes = ['macromolecule', 'nucleic acid feature', 'simple chemical', 'empty set', 'unspecified entity', 'perturbing agent', 'complex', 'nucleic acid feature multimer', 'macromolecule multimer', 'simple chemical multimer', 'complex multimer']; elementUtilities.sifTypes = ['SIF macromolecule', 'SIF simple chemical']; elementUtilities.otherNodeTypes = ['compartment', 'tag', 'submap', 'topology group']; elementUtilities.nodeTypes = elementUtilities.epnTypes.concat(elementUtilities.logicalOperatorTypes).concat(elementUtilities.processTypes).concat(elementUtilities.biologicalActivityTypes).concat(elementUtilities.sifTypes).concat(elementUtilities.otherNodeTypes); @@ -5741,7 +5741,7 @@ module.exports = function () { elementUtilities.canHaveSBGNLabel = function (ele) { var sbgnclass = elementUtilities.getPureSbgnClass(ele); - return sbgnclass != 'and' && sbgnclass != 'or' && sbgnclass != 'not' && sbgnclass != 'delay' && sbgnclass != 'association' && sbgnclass != 'dissociation' && sbgnclass != 'source and sink' && !sbgnclass.endsWith('process'); + return sbgnclass != 'and' && sbgnclass != 'or' && sbgnclass != 'not' && sbgnclass != 'delay' && sbgnclass != 'association' && sbgnclass != 'dissociation' && sbgnclass != 'empty set' && !sbgnclass.endsWith('process'); }; // Returns whether the give element have unit of information @@ -5775,7 +5775,7 @@ module.exports = function () { elementUtilities.mustBeSquare = function (ele) { var sbgnclass = elementUtilities.getPureSbgnClass(ele); - return sbgnclass.indexOf('process') != -1 || sbgnclass == 'source and sink' || sbgnclass == 'and' || sbgnclass == 'or' || sbgnclass == 'not' || sbgnclass == 'association' || sbgnclass == 'dissociation' || sbgnclass == 'delay'; + return sbgnclass.indexOf('process') != -1 || sbgnclass == 'empty set' || sbgnclass == 'and' || sbgnclass == 'or' || sbgnclass == 'not' || sbgnclass == 'association' || sbgnclass == 'dissociation' || sbgnclass == 'delay'; }; // Returns whether any of the given nodes must not be in square shape @@ -5851,12 +5851,12 @@ module.exports = function () { elementUtilities.isPNClass = function (ele) { var sbgnclass = elementUtilities.getPureSbgnClass(ele); return inArray(sbgnclass, elementUtilities.processTypes); - }; // Returns wether the given element or string is of the special empty set/source and sink class + }; // Returns wether the given element or string is of the special empty set/empty set class elementUtilities.isEmptySetClass = function (ele) { var sbgnclass = elementUtilities.getPureSbgnClass(ele); - return sbgnclass == 'source and sink'; + return sbgnclass == 'empty set'; }; // Returns whether the given element is a logical operator @@ -6171,7 +6171,7 @@ module.exports = function () { } // We need to define new node shapes with their class names for these nodes - if (_class == 'source and sink' || _class == 'nucleic acid feature' || _class == 'macromolecule' || _class == 'simple chemical' || _class == 'complex' || _class == 'biological activity') { + if (_class == 'empty set' || _class == 'nucleic acid feature' || _class == 'macromolecule' || _class == 'simple chemical' || _class == 'complex' || _class == 'biological activity') { return _class; } // These shapes can have ports. If they have ports we represent them by polygons, else they are represented by ellipses or rectangles // conditionally. @@ -7377,7 +7377,7 @@ module.exports = function () { width: 30, height: 30 }, - 'source and sink': { + 'empty set': { width: 22, height: 22 }, @@ -14193,4 +14193,4 @@ module.exports = require("xml2js");; /******/ })() ; }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zYmdudml6L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvc2Jnbi1leHRlbnNpb25zL3NiZ24tY3ktaW5zdGFuY2UtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3NiZ24tZXh0ZW5zaW9ucy9zYmduLWN5LXJlbmRlcmVyLmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2NkLXRvLXNiZ25tbC1jb252ZXJ0ZXItZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9jbGFzc2VzLmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2VsZW1lbnQtdXRpbGl0aWVzLWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vc2JnbnZpei8uL3NyYy91dGlsaXRpZXMvZXhwZXJpbWVudGFsLWRhdGEtb3ZlcmxheS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9maWxlLXV0aWxpdGllcy1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2dyYXBoLXV0aWxpdGllcy1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2pzb24tdG8tbnd0LWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2pzb24tdG8tc2Jnbm1sLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2pzb24tdG8tc2lmLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2tleWJvYXJkLWlucHV0LXV0aWxpdGllcy1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2xheW91dC1sb2FkZXItZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9sYXlvdXQtdG8tdGV4dC1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vc2JnbnZpei8uL3NyYy91dGlsaXRpZXMvbWFpbi11dGlsaXRpZXMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9ud3QtdG8tanNvbi1jb252ZXJ0ZXItZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9vcHRpb24tdXRpbGl0aWVzLWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vc2JnbnZpei8uL3NyYy91dGlsaXRpZXMvc2Jnbm1sLXRvLWNkLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3NiZ25tbC10by1qc29uLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3NiZ25tbC10by1zYm1sLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3NibWwtdG8tc2Jnbm1sLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3NpZi10by1qc29uLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3RhYi1kZWxpbWV0ZWQtcGFyc2VyLmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3RhYi1kZWxpbWl0ZWQtdG8tanNvbi1jb252ZXJ0ZXItZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy90ZXh0LXV0aWxpdGllcy5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy91aS11dGlsaXRpZXMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy91bmRvLXJlZG8tYWN0aW9uLWZ1bmN0aW9ucy1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3ZhbGlkTWFwUHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9zYmdudml6L2V4dGVybmFsIFwiY29uc29sZS1icm93c2VyaWZ5XCIiLCJ3ZWJwYWNrOi8vc2JnbnZpei9leHRlcm5hbCBcImxpYnNiZ24uanNcIiIsIndlYnBhY2s6Ly9zYmdudml6L2V4dGVybmFsIFwicHJldHR5LWRhdGFcIiIsIndlYnBhY2s6Ly9zYmdudml6L2V4dGVybmFsIFwieG1sMmpzXCIiLCJ3ZWJwYWNrOi8vc2JnbnZpei93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9zYmdudml6L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJzYmdudml6IiwiX29wdGlvbnMiLCJwYXJhbSIsIm9wdGlvblV0aWxpdGllcyIsInJlcXVpcmUiLCJvcHRpb25zIiwiZXh0ZW5kT3B0aW9ucyIsInNiZ25DeUluc3RhbmNlIiwidWlVdGlsaXRpZXMiLCJmaWxlVXRpbGl0aWVzIiwiZ3JhcGhVdGlsaXRpZXMiLCJtYWluVXRpbGl0aWVzIiwia2V5Ym9hcmRJbnB1dFV0aWxpdGllcyIsImV4cGVyaW1lbnRhbERhdGFPdmVybGF5IiwiZWxlbWVudFV0aWxpdGllcyIsInVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zIiwianNvblRvU2Jnbm1sQ29udmVydGVyIiwianNvblRvTnd0Q29udmVydGVyIiwic2Jnbm1sVG9Kc29uQ29udmVydGVyIiwibnd0VG9Kc29uQ29udmVydGVyIiwidGRUb0pzb25Db252ZXJ0ZXIiLCJzaWZUb0pzb25Db252ZXJ0ZXIiLCJqc29uVG9TaWZDb252ZXJ0ZXIiLCJjbGFzc2VzIiwidGRQYXJzZXIiLCJsYXlvdXRMb2FkZXIiLCJsYXlvdXRUb1RleHQiLCJjZFRvU2Jnbm1sQ29udmVydGVyIiwic2Jnbm1sVG9DZENvbnZlcnRlciIsInNiZ25tbFRvU2JtbENvbnZlcnRlciIsInNibWxUb1NiZ25tbENvbnZlcnRlciIsImdldEN5Iiwic2NyYXRjaCIsInNiZ252aXpQYXJhbXMiLCJhcGkiLCJwcm9wIiwidmFsaWRNYXBQcm9wZXJ0aWVzIiwicmVnaXN0ZXIiLCJfbGlicyIsImxpYnMiLCJqUXVlcnkiLCJjeXRvc2NhcGUiLCJzYXZlQXMiLCJmaWxlc2F2ZXIiLCJ0aXBweSIsIlRpcHB5IiwibGliVXRpbGl0aWVzIiwic2V0TGlicyIsInNiZ25SZW5kZXJlciIsIm1vZHVsZSIsImV4cG9ydHMiLCIkIiwicmVmcmVzaFBhZGRpbmdzIiwiY3kiLCJiaW5kIiwiZ2V0T3B0aW9ucyIsImdldFBvaW50T25DaXJjbGUiLCJjZW50ZXJYIiwiY2VudGVyWSIsInJhZGl1cyIsImFuZ2xlSW5EZWdyZWUiLCJhbmdsZUluUmFkaWFuIiwiTWF0aCIsIlBJIiwieCIsImNvcyIsInkiLCJzaW4iLCJnZW5lcmF0ZUNpcmNsZVN0cmluZyIsImFuZ2xlRnJvbSIsImFuZ2xlVG8iLCJudW1PZlBvaW50cyIsImNpcmNsZVN0ciIsInN0ZXBTaXplIiwiY3VycmVudEFuZ2xlIiwiaSIsInBvaW50IiwiZ2VuZXJhdGVTaGFwZVdpdGhQb3J0U3RyaW5nIiwibGluZUhXIiwic2hhcGVIVyIsInR5cGUiLCJvcmllbnRhdGlvbiIsInBvbHlnb25TdHIiLCJhYm92ZVBvaW50cyIsImJlbG93UG9pbnRzIiwibGVmdFBvaW50cyIsInJpZ2h0UG9pbnRzIiwicmVnaXN0ZXJVbmRvUmVkb0FjdGlvbnMiLCJ1ciIsInVuZG9SZWRvIiwiYWN0aW9uIiwiZGVsZXRlRWxlc1NpbXBsZSIsInJlc3RvcmVFbGVzIiwiZGVsZXRlTm9kZXNTbWFydCIsInNldFBvcnRzT3JkZXJpbmciLCJyZW1vdmVBbGwiLCJyZXN0b3JlQWxsIiwiaGlkZUV4cCIsInVuaGlkZUV4cCIsImhpZGVGaWxlIiwiaGlkZUZpbGVVbmRvIiwidW5oaWRlRmlsZSIsInVuaGlkZUZpbGVVbmRvIiwicmVtb3ZlRXhwIiwiYWRkRXhwIiwicmVtb3ZlRmlsZSIsImFkZEZpbGUiLCJleHBCdXR0b25DaGFuZ2UiLCJmaWxlQnV0dG9uQ2hhbmdlSGlkZSIsImZpbGVCdXR0b25DaGFuZ2VVbkhpZGUiLCJzaG93VG9vbHRpcCIsImV2ZW50Iiwibm9kZSIsInRhcmdldCIsImN5VGFyZ2V0IiwiY2FuSGF2ZVRvb2x0aXAiLCJpc1NJRk5vZGUiLCJkYXRhIiwicmVmIiwicG9zIiwicG9zaXRpb24iLCJjeVBvc2l0aW9uIiwicGFuIiwiem9vbSIsImluZm9ib3giLCJBdXhpbGlhcnlVbml0IiwiY2hlY2tQb2ludCIsInRvb2x0aXBDb250ZW50IiwidW5kZWZpbmVkIiwicG9wcGVyUmVmIiwibW9kZWxQb3MiLCJnZXRBYnNvbHV0ZUNvb3JkIiwibW9kZWxXIiwiYmJveCIsInciLCJtb2RlbEgiLCJoIiwicmVuZGVyZWRXIiwicmVuZGVyZWRIIiwicmVuZGVyZWRQb3MiLCJjb252ZXJ0VG9SZW5kZXJlZFBvc2l0aW9uIiwicmVuZGVyZWREaW1zIiwicmVuZGVyZWRQb3NpdGlvbiIsInJlbmRlcmVkRGltZW5zaW9ucyIsInBsYWNlbWVudCIsImFuY2hvclNpZGUiLCJkZXN0cm95VGlwcHkiLCJvbmUiLCJjb250ZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJpbm5lckhUTUwiLCJ0cmlnZ2VyIiwiaGlkZU9uQ2xpY2siLCJhcnJvdyIsIm9uSGlkZGVuIiwib2ZmIiwiZGVzdHJveSIsIm9uIiwic2V0VGltZW91dCIsInNob3ciLCJiaW5kQ3lFdmVudHMiLCJ3YWl0RHVyYXRpb24iLCJub2RlVGFwZHJhZ291dCIsImN1cnJFdmVudCIsImluUXVldWUiLCJjbGVhck5vZGVFdmVudCIsIm5vZGVUYXBkcmFnIiwiZ2V0U2hvd1Rvb2x0aXBBc3ljbiIsInNob3dUb29sdGlwQXN5Y24iLCJlIiwiY2xlYXJUaW1lb3V0IiwidXBkYXRlIiwiX3ByaXZhdGUiLCJzdGFydHNXaXRoIiwiaW5mb0xhYmVsIiwiZ2V0SW5mb0xhYmVsIiwic3RhcnRCYXRjaCIsImVuZEJhdGNoIiwicmVtb3ZlRGF0YSIsIm5vZGVzIiwidXBkYXRlQ29tcG91bmRCb3VuZHMiLCJyZWNhbGN1bGF0ZU9uQ29tcGxleGl0eU1hbmFnZW1lbnQiLCJyZW1vdmVTdHlsZSIsIm5hbWUiLCJhcmdzIiwicGFyZW50cyIsImVsZW1lbnRzIiwianNvbnMiLCJzaW1wbGVzIiwibm90IiwiYWxsRWxlbWVudHMiLCJjb25jYXQiLCJwb3J0cyIsImZvckVhY2giLCJjYW5IYXZlUG9ydHMiLCJpZCIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsInZpZXdwb3J0IiwiYmVmb3JlUGVyZm9ybUxheW91dCIsImFsbEVsZW1lbnRzMiIsInBvcnRzMiIsInZpZXdwb3J0MiIsInJlcyIsImpzb24iLCJmbGF0RWxlcyIsImJhdGNoIiwibGF5b3V0IiwicG9ydHNFbmFibGVkIiwiY2hhbmdlUG9ydHNPcmllbnRhdGlvbkFmdGVyTGF5b3V0IiwiX2N5IiwiaXNMYXlvdXRSZXF1aXJlZCIsImNhbGxiYWNrIiwic2V0Q29tcG91bmRJbmZvYm94ZXMiLCJjeUluc3RhbmNlIiwiaW5mb2JveENhbGN1bGF0ZWQiLCJpc1BhcmVudCIsImNoaWxkcmVuIiwiY2hpbGROb2RlIiwiY29ycmVjdEluZm9Cb3hDb29yZCIsImxlbmd0aCIsInN0YXRlc2FuZGluZm9zIiwiaW5mb0JveE9uTm9kZSIsInNldEFuY2hvclNpZGUiLCJzdGF0ZXNUb0FkZCIsImNvcmRSZXN1bHQiLCJjb252ZXJ0VG9SZWxhdGl2ZUNvb3JkIiwiaXNEaXNwbGF5ZWQiLCJsb2NhdGlvbiIsImxheW91dHMiLCJBdXhVbml0TGF5b3V0IiwiY29uc3RydWN0IiwiYWRkQXV4VW5pdCIsInNlbGVjdE5leHRBdmFpbGFibGUiLCJsb2NhdGlvbnMiLCJjaGVja0ZpdCIsImZpdFVuaXRzIiwic2VsZWN0aW9uQ29sb3IiLCJzYmduU3R5bGVTaGVldCIsInN0eWxlc2hlZXQiLCJzZWxlY3RvciIsImNzcyIsImVsZSIsImdldEN5U2hhcGUiLCJnZXRFbGVtZW50Q29udGVudCIsIm9wdCIsImFkanVzdE5vZGVMYWJlbEZvbnRTaXplQXV0b21hdGljYWxseSIsImFkanVzdCIsImdldExhYmVsVGV4dFNpemUiLCJmaXRMYWJlbHNUb05vZGVzIiwiaXNGaXQiLCJ3aWR0aCIsInBvcnQiLCJhYnMiLCJfY2xhc3MiLCJlbmRzV2l0aCIsImdldENvbXBsZXhNYXJnaW4iLCJnZXRDb21wbGV4UGFkZGluZyIsImV4dHJhQ29tcGFydG1lbnRQYWRkaW5nIiwiZ2V0Q29tcG91bmRQYWRkaW5ncyIsImNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkIiwibWluIiwicGFyc2VGbG9hdCIsIm1heCIsImdldEN5VGFyZ2V0QXJyb3dGaWxsIiwic2VsZWN0ZWQiLCJnZXRDeUFycm93U2hhcGUiLCJnZXRFbmRQb2ludCIsImdldEFycmF5TGluZVN0eWxlIiwic2Jnbk5ldHdvcmtDb250YWluZXIiLCJuZXR3b3JrQ29udGFpbmVyU2VsZWN0b3IiLCJjb250YWluZXIiLCJzaG93T3ZlcmxheSIsIm1pblpvb20iLCJtYXhab29tIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsIm1vdGlvbkJsdXIiLCJ3aGVlbFNlbnNpdGl2aXR5IiwicmVhZHkiLCJ1bmRvYWJsZSIsImN5TWF0aCIsIm1hdGgiLCJjeUJhc2VOb2RlU2hhcGVzIiwiYmFzZU5vZGVTaGFwZXMiLCJjeVN0eWxlUHJvcGVydGllcyIsInN0eWxlUHJvcGVydGllcyIsIiQkIiwic2JnbiIsImRyYXdCb3JkZXIiLCJjb250ZXh0IiwiYm9yZGVyV2lkdGgiLCJib3JkZXJDb2xvciIsImJvcmRlclN0eWxlIiwiYm9yZGVyT3BhY2l0eSIsInBhcmVudE9wYWNpdHkiLCJlZmZlY3RpdmVPcGFjaXR5IiwicHJvcHNUb1Jlc3RvcmUiLCJpbml0aWFsUHJvcHMiLCJwcm9wTmFtZSIsImxpbmVXaWR0aCIsImxpbmVDYXAiLCJzdHJva2VTdHlsZSIsImdsb2JhbEFscGhhIiwic2V0TGluZURhc2giLCJzdHJva2UiLCJnY28iLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJkcmF3Um91bmRSZWN0YW5nbGVQYXRoIiwiaGVpZ2h0IiwiaGFsZldpZHRoIiwiaGFsZkhlaWdodCIsImNvcm5lclJhZGl1cyIsImdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzIiwiYmVnaW5QYXRoIiwibW92ZVRvIiwiYXJjVG8iLCJsaW5lVG8iLCJjbG9zZVBhdGgiLCJkcmF3UG9seWdvblBhdGgiLCJwb2ludHMiLCJoYWxmVyIsImhhbGZIIiwic2JnblNoYXBlcyIsInRvdGFsbHlPdmVycmlkZW5Ob2RlU2hhcGVzIiwiY2FuSGF2ZUluZm9Cb3hTaGFwZXMiLCJjYW5CZU11bHRpbWVyU2hhcGVzIiwiY2FsY3VsYXRlRGlzdGFuY2UiLCJwb2ludDEiLCJwb2ludDIiLCJkaXN0YW5jZSIsInBvdyIsInNxcnQiLCJjb2xvcnMiLCJjbG9uZSIsImdldERlZmF1bHRDb21wbGV4Q29ybmVyTGVuZ3RoIiwiZHJhd1N0YXRlQW5kSW5mb3MiLCJzaWRlIiwiZHJhdyIsImRyYXdJbmZvQm94Iiwic2hhcGVOYW1lIiwiZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlIiwiZHJhd0NvbXBsZXgiLCJnZW5lcmF0ZVBlcnR1cmJpbmdBZ2VudFBvaW50cyIsIm51Y2xlaWNBY2lkQ2hlY2tQb2ludCIsInBhZGRpbmciLCJwb2ludEluc2lkZVBvbHlnb24iLCJjaGVja0luRWxsaXBzZSIsImZvcmNlT3BhY2l0eVRvT25lIiwiZmlsbFN0eWxlIiwidmFsdWUiLCJkcmF3U2ltcGxlQ2hlbWljYWxQYXRoIiwiZHJhd1NpbXBsZUNoZW1pY2FsIiwiZmlsbCIsInNpbXBsZUNoZW1pY2FsTGVmdENsb25lIiwiY2xvbmVNYXJrZXIiLCJvcGFjaXR5Iiwib2xkR2xvYmFsQWxwaGEiLCJvbGRTdHlsZSIsIm1hcmtlckJlZ2luWCIsIm1hcmtlckJlZ2luWSIsIm1hcmtlckVuZFgiLCJtYXJrZXJFbmRZIiwiYXJjIiwic2ltcGxlQ2hlbWljYWxSaWdodENsb25lIiwiZHJhd0VsbGlwc2VQYXRoIiwiZHJhd1BhdGgiLCJkcmF3QmFycmVsIiwiZHJhd051Y0FjaWRGZWF0dXJlMiIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsInRvcCIsInN0ciIsInBhdHRlcm4iLCJsIiwiY2hhckF0IiwiaXNNdWx0aW1lciIsInNiZ25DbGFzcyIsImdlbmVyYXRlQ29tcGxleFNoYXBlUG9pbnRzIiwiY29ybmVyTGVuZ3RoIiwiY3BYIiwiY3BZIiwiY29tcGxleFBvaW50cyIsImdldERlZmF1bHRNdWx0aW1lclBhZGRpbmciLCJkcmF3SW1hZ2UiLCJpbWdPYmoiLCJjbGlwIiwiaW1nIiwiaW1nVyIsImltZ0giLCJyZXN0b3JlIiwidHlwZXMiLCJub2RlU2hhcGUiLCJlbnVtcyIsInB1c2giLCJyZWdpc3RlclNiZ25Ob2RlU2hhcGVzIiwiZ2VuZXJhdGVEcmF3RmNuIiwicGxhaW5EcmF3RmNuIiwiZXh0cmFEcmF3RmNuIiwiY2FuQmVNdWx0aW1lciIsImNsb25lTWFya2VyRmNuIiwiY2FuSGF2ZUluZm9Cb3giLCJtdWx0aW1lclBhZGRpbmciLCJvdXRlcldpZHRoIiwib3V0ZXJIZWlnaHQiLCJiZ09wYWNpdHkiLCJpc0Nsb25lZCIsImNsb25lbWFya2VyIiwiZ2VuZXJhdGVJbnRlcnNlY3RMaW5lRmNuIiwicGxhaW5JbnRlcnNlY3RMaW5lRmNuIiwiaW50ZXJzZWN0aW9ucyIsInN0YXRlQW5kSW5mb0ludGVyc2VjdExpbmVzIiwiaW50ZXJzZWN0TGluZVN0YXRlQW5kSW5mb0JveGVzIiwibm9kZUludGVyc2VjdExpbmVzIiwibXVsdGltZXJJbnRlcnNlY3Rpb25MaW5lcyIsImNsb3Nlc3RJbnRlcnNlY3Rpb25Qb2ludCIsImdlbmVyYXRlQ2hlY2tQb2ludEZjbiIsInBsYWluQ2hlY2tQb2ludEZjbiIsInRocmVzaG9sZCIsIm5vZGVDaGVjayIsInN0YXRlQW5kSW5mb0NoZWNrIiwiY2hlY2tQb2ludFN0YXRlQW5kSW5mb0JveGVzIiwibXVsdGltZXJDaGVjayIsInNoYXBlTmFtZXMiLCJwbGFpbkRyYXciLCJwbGFpbkludGVyc2VjdExpbmUiLCJwbGFpbkNoZWNrUG9pbnQiLCJleHRyYURyYXciLCJpbnRlcnNlY3RMaW5lIiwic2hhcGUiLCJkcmF3RWxsaXBzZSIsImRyYXdDcm9zc0xpbmUiLCJnZW5lcmF0ZVVuaXROZ29uUG9pbnRzIiwic2NhbGVYIiwic2NhbGVZIiwiZHJhd0Jpb2xvZ2ljYWxBY3Rpdml0eSIsImdlbmVyYXRlQmlvbG9naWNhbEFjdGl2aXR5UG9pbnRzIiwiZHJhd1JvdW5kUmVjdGFuZ2xlIiwiZ2VuZXJhdGVOdWNsZWljQWNpZFBvaW50cyIsImdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSIsImdlbmVyYXRlQ29tcGFydG1lbnRQb2ludHMiLCJyb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUiLCJwb2x5Z29uSW50ZXJzZWN0TGluZSIsImRpYW0iLCJmaXJzdENpcmNsZUNlbnRlclgiLCJmaXJzdENpcmNsZUNlbnRlclkiLCJzZWNvbmRDaXJjbGVDZW50ZXJYIiwic2Vjb25kQ2lyY2xlQ2VudGVyWSIsImJvdHRvbUNpcmNsZUNlbnRlclgiLCJib3R0b21DaXJjbGVDZW50ZXJZIiwicmVjUG9pbnRzIiwiY2xvbmVYIiwiY2xvbmVZIiwiY2xvbmVXaWR0aCIsImNsb25lSGVpZ2h0IiwibWFya2VyUG9pbnRzIiwiY2xvc2VzdEludGVyc2VjdGlvbiIsIm1pbkRpc3RhbmNlIiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwibnVjbGVpY0FjaWRJbnRlcnNlY3Rpb25MaW5lIiwibm9kZVgiLCJub2RlWSIsInN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMiLCJ0b3BTdGFydFgiLCJ0b3BTdGFydFkiLCJ0b3BFbmRYIiwidG9wRW5kWSIsImZpbml0ZUxpbmVzSW50ZXJzZWN0IiwicmlnaHRTdGFydFgiLCJyaWdodFN0YXJ0WSIsInJpZ2h0RW5kWCIsInJpZ2h0RW5kWSIsImJvdHRvbVN0YXJ0WCIsImJvdHRvbVN0YXJ0WSIsImJvdHRvbUVuZFgiLCJib3R0b21FbmRZIiwibGVmdFN0YXJ0WCIsImxlZnRTdGFydFkiLCJsZWZ0RW5kWCIsImxlZnRFbmRZIiwiYXJjSW50ZXJzZWN0aW9ucyIsImJvdHRvbVJpZ2h0Q2VudGVyWCIsImJvdHRvbVJpZ2h0Q2VudGVyWSIsImludGVyc2VjdExpbmVDaXJjbGUiLCJib3R0b21MZWZ0Q2VudGVyWCIsImJvdHRvbUxlZnRDZW50ZXJZIiwicGVydHVyYmluZ0FnZW50SW50ZXJzZWN0TGluZSIsIngxIiwieTEiLCJ4MiIsInkyIiwiaW50ZXJzZWN0aW9uIiwidG9wTGVmdENlbnRlclgiLCJ0b3BMZWZ0Q2VudGVyWSIsInRvcFJpZ2h0Q2VudGVyWCIsInRvcFJpZ2h0Q2VudGVyWSIsImludGVyc2VjdExpbmVFbGxpcHNlIiwiYW4iLCJibiIsImQiLCJtIiwibiIsImEiLCJiIiwiYyIsImRpc2NyaW1pbmFudCIsInQxIiwidDIiLCJ4TWluIiwieE1heCIsInlNaW4iLCJ5TWF4IiwicGFyc2VJbnQiLCJzdGF0ZUFuZEluZm9zIiwic3RhdGUiLCJpbmZvQm94V2lkdGgiLCJpbmZvQm94SGVpZ2h0IiwiY3VyckludGVyc2VjdGlvbnMiLCJjbGF6eiIsImNvb3JkIiwiU3RhdGVWYXJpYWJsZSIsIlVuaXRPZkluZm9ybWF0aW9uIiwiaXNOb2RlU2hhcGVUb3RhbGx5T3ZlcnJpZGVuIiwicmVuZGVyIiwiZ2V0Tm9kZVNoYXBlIiwianNvblRvU2Jnbm1sIiwiY2RUb1NiZ25tbCIsImNvbnZlcnQiLCJ4bWwiLCJhamF4IiwidXJsIiwic3VjY2VzcyIsImVycm9yIiwidHJ1bmNhdGUiLCJucyIsImdldEF1eFVuaXRDbGFzcyIsInVuaXQiLCJ1bml0VHlwZSIsImNsYXNzTmFtZSIsInBhcmVudCIsIm9iaiIsInNldFBhcmVudFJlZiIsImdldFBhcmVudCIsIm1haW5PYmoiLCJnZXRFbGVtZW50QnlJZCIsIm5ld1BhcmVudCIsInN0YXRlV2lkdGgiLCJzdGF0ZUhlaWdodCIsInN0YXRlQ2VudGVyWCIsInN0YXRlQ2VudGVyWSIsImNvcHkiLCJleGlzdGluZ0luc3RhbmNlIiwibmV3SWQiLCJuZXdVbml0IiwicGFyZW50VG9TZXQiLCJleHRlbmQiLCJjb29yZFR5cGUiLCJ1bml0Q2xhc3MiLCJjb29yZHMiLCJkcmF3U2hhcGUiLCJoYXNUZXh0IiwiZHJhd1RleHQiLCJnZXRUZXh0IiwiRXJyb3IiLCJ0bXBfY3R4dCIsImRhc2hlZCIsIm9sZEZvbnQiLCJmb250Iiwib2xkT3BhY2l0eSIsInRleHRBbGlnbiIsInRleHRCYXNlbGluZSIsInRleHQiLCJmaXRMYWJlbHNUb0luZm9ib3hlcyIsImtleSIsIl90ZXh0Q2FjaGUiLCJmaWxsVGV4dCIsInBhcmVudFdpZHRoIiwicGFyZW50SGVpZ2h0IiwicmVwbGFjZSIsImFic1giLCJhYnNZIiwiY29udmVydFRvQWJzb2x1dGVDb29yZCIsInJlbFgiLCJyZWxZIiwicGFyZW50Tm9kZSIsInRoaXNYIiwidGhpc1kiLCJ0aGlzSCIsInRoaXNXIiwiY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nIiwicGFyZW50WCIsInBhcmVudFkiLCJwYXJlbnRYMSIsInRvRml4ZWQiLCJwYXJlbnRYMiIsInBhcmVudFkxIiwicGFyZW50WTIiLCJhZGRUb1BhcmVudCIsImluZGV4Iiwic3BsaWNlIiwiaW5zZXJ0ZWRQb3NpdGlvbiIsInJlbW92ZUZyb21QYXJlbnQiLCJwYXJlbnRMYXlvdXQiLCJyZW1vdmVBdXhVbml0IiwiaXNFbXB0eSIsImluZGV4T2YiLCJnZXRQb3NpdGlvbkluZGV4IiwidW5pdHMiLCJzdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiIsImdlbmVyYXRlU3RhdGVWYXJJZCIsInZhcmlhYmxlIiwic3RhdGVWYWx1ZSIsInN0YXRlVmFyaWFibGUiLCJjcmVhdGUiLCJzdGF0ZVZhciIsInJlbW92ZSIsIm5ld1N0YXRlVmFyIiwiZ2VuZXJhdGVVbml0T2ZJbmZvSWQiLCJsYWJlbCIsIm5ld1VuaXRPZkluZm8iLCJFbnRpdHlUeXBlIiwiRVBOIiwic3RhdGVWYXJpYWJsZURlZmluaXRpb25zIiwiRVBOcyIsImNyZWF0ZU5ld0RlZmluaXRpb25Gb3IiLCJuZXdEZWZpbml0aW9uIiwiU3RhdGVWYXJpYWJsZURlZmluaXRpb24iLCJlbnRpdHlUeXBlIiwic3RhdGVWYXJpYWJsZXMiLCJhc3NpZ25TdGF0ZVZhcmlhYmxlIiwibWF0Y2hTdGF0ZURlZiIsIm1hdGNoU3RhdGVWYXJpYWJsZSIsImdldENvbmNlcm5lZEVQTnMiLCJtYXRjaFN0YXRlVmFyIiwiYWxpZ25tZW50Iiwic2V0UGFyZW50Tm9kZVJlZiIsInJlbmRlckxlbmd0aENhY2hlIiwibGVuZ3RoVXNlZCIsIm91dGVyTWFyZ2luIiwiZ2V0UGFyZW50Tm9kZSIsInVuaXRHYXAiLCJjdXJyZW50VG9wVW5pdEdhcCIsImN1cnJlbnRCb3R0b21Vbml0R2FwIiwiY3VycmVudExlZnRVbml0R2FwIiwiY3VycmVudFJpZ2h0VW5pdEdhcCIsImFsd2F5c1Nob3dBdXhVbml0cyIsIm1heFVuaXREaXNwbGF5ZWQiLCJsYXN0UG9zIiwicHJlQ29tcHV0ZWQiLCJjb21wdXRlQ29vcmRzIiwiZmlsdGVyIiwibG9jIiwic2V0RGlzcGxheWVkVW5pdHMiLCJyZWxhdGl2ZUNvb3JkcyIsImdldEN1cnJlbnRHYXAiLCJsYXN0VW5pdCIsImxhc3RVbml0QWJzQ29yZCIsInJlb3JkZXJGcm9tUG9zaXRpb25zIiwic29ydCIsInVwZGF0ZUxlbmd0aENhY2hlIiwicHJldmlvdXMiLCJnZXRPdXRlck1hcmdpbiIsImN1cnJlbnRMZW5ndGgiLCJpc1RvckIiLCJnZXRVbml0R2FwIiwiZ2V0RHJhd2FibGVVbml0QW1vdW50IiwiZ2V0QWx3YXlzU2hvd0F1eFVuaXRzIiwiYXZhaWxhYmxlU3BhY2UiLCJnZXRNYXhVbml0RGlzcGxheWVkIiwiZ2V0VXNlZFdpZHRoIiwidGIiLCJ0b3RhbFdpZHRoIiwiZ2V0VXNlZEhlaWdodCIsInRvdGFsSGVpZ2h0IiwiZ2V0VXNlZExlbmd0aFRCIiwiZ2V0VXNlZExlbmd0aExSIiwic2V0Q3VycmVudEdhcCIsImZvcmNlQ2hlY2siLCJmaXRMb2NhdGlvbnMiLCJmaXJzdFVuaXQiLCJjb29yZHNGaXJzdCIsImNvb3Jkc0xhc3QiLCJnYXAiLCJmaXJzdFgxIiwibGFzdFgyIiwiZmlyc3RZMSIsImxhc3RZMiIsInNldElkZWFsR2FwIiwiZXN0aW1hdGVkR2FwIiwiYXV4VW5pdCIsInVzZWRMZW5ndGgiLCJyZWxhdGl2ZUNvcmQiLCJwcmVjb21wdXRlQ29vcmRzIiwiZG9Gb3JjZVVwZGF0ZSIsImZpbmFsTGVuZ3RoVXNlZCIsIm1vZGlmeVVuaXRzIiwib2xkTG9jYXRpb24iLCJwb3NYIiwicG9zWSIsIm9sZEF1eFVuaXQiLCJkZWxldGVVbml0cyIsImRlbGV0ZUluZGV4IiwiaW5zZXJ0QXV4VW5pdCIsImluc2VydFVuaXRzIiwidW5pdENvdW50IiwidW5pdExlbmd0aCIsInJpZ2h0TW9zdFBvaW50IiwiYm94IiwiZ2V0Q3VycmVudFRvcEdhcCIsImdldEN1cnJlbnRCb3R0b21HYXAiLCJnZXRDdXJyZW50TGVmdEdhcCIsImdldEN1cnJlbnRSaWdodEdhcCIsInJlc3VsdExvY2F0aW9uIiwicmVzaXplUGFyZW50IiwiaXNMb3JSIiwic2V0UGFyZW50TWluTGVuZ3RoIiwicGFyZW50TGF5b3V0cyIsImNvbXBhcmVWYWwiLCJuZXdMYXlvdXQiLCJ0ZXh0VXRpbGl0aWVzIiwiZ2V0TGlicyIsImluQXJyYXkiLCJhcnIiLCJtYXBUeXBlIiwiZmlsZUZvcm1hdCIsIlBEIiwiQUYiLCJTSUYiLCJncmFwaFRvcG9sb2d5TG9ja2VkIiwiZ2VuZXJhdGVVVUlEIiwiRGF0ZSIsIm5vdyIsInBlcmZvcm1hbmNlIiwiciIsInJhbmRvbSIsImZsb29yIiwidG9TdHJpbmciLCJnZW5lcmF0ZU5vZGVJZCIsImdlbmVyYXRlRWRnZUlkIiwiY29ubmVjdGl2aXR5Q29uc3RyYWludHMiLCJhc1NvdXJjZSIsImlzQWxsb3dlZCIsImFzVGFyZ2V0IiwibWF4RWRnZSIsIm1heFRvdGFsIiwibG9naWNhbE9wZXJhdG9yVHlwZXMiLCJwcm9jZXNzVHlwZXMiLCJiaW9sb2dpY2FsQWN0aXZpdHlUeXBlcyIsImVwblR5cGVzIiwic2lmVHlwZXMiLCJvdGhlck5vZGVUeXBlcyIsIm5vZGVUeXBlcyIsImNvbXBvdW5kTm9kZVR5cGVzIiwic2ltcGxlTm9kZVR5cGVzIiwiZ2V0Iiwic2lmRWRnZVR5cGVzIiwiZWRnZVR5cGVzIiwidW5kaXJlY3RlZEVkZ2VUeXBlcyIsImVsZW1lbnRUeXBlcyIsImdldFNiZ25DbGFzcyIsInNiZ25jbGFzcyIsImdldFB1cmVTYmduQ2xhc3MiLCJpc1ZhbGlkUGFyZW50IiwiX25vZGVDbGFzcyIsIl9wYXJlbnRDbGFzcyIsIm5vZGVDbGFzcyIsInBhcmVudENsYXNzIiwiY29ubmVjdGVkRWRnZXMiLCJpc0VQTkNsYXNzIiwiZ2V0Q29tbW9uUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJkYXRhT3JDc3MiLCJpc0Z1bmN0aW9uIiwiZ2V0VmFsIiwidmFsIiwidHJ1ZUZvckFsbEVsZW1lbnRzIiwiZmNuIiwiY2FuSGF2ZVNCR05DYXJkaW5hbGl0eSIsImNhbkhhdmVTQkdOTGFiZWwiLCJjYW5IYXZlVW5pdE9mSW5mb3JtYXRpb24iLCJjYW5IYXZlTXVsdGlwbGVVbml0T2ZJbmZvcm1hdGlvbiIsImNhbkhhdmVTdGF0ZVZhcmlhYmxlIiwibXVzdEJlU3F1YXJlIiwic29tZU11c3ROb3RCZVNxdWFyZSIsImNhbkJlQ2xvbmVkIiwibGlzdCIsImlzQmlvbG9naWNhbEFjdGl2aXR5IiwiaXNTSUZFZGdlIiwiaXNVbmRpcmVjdGVkRWRnZSIsImlzRGlyZWN0ZWRFZGdlIiwiaXNQTkNsYXNzIiwiaXNFbXB0eVNldENsYXNzIiwiaXNMb2dpY2FsT3BlcmF0b3IiLCJjb252ZW5pZW50VG9FcXVpdmFsZW5jZSIsImlzTW9kdWxhdGlvbkFyY0NsYXNzIiwiaXNBRkFyY0NsYXNzIiwiZ2V0VG9wTW9zdE5vZGVzIiwibm9kZXNNYXAiLCJyb290cyIsImFsbEhhdmVUaGVTYW1lUGFyZW50IiwibW92ZU5vZGVzIiwicG9zaXRpb25EaWZmIiwibm90Q2FsY1RvcE1vc3ROb2RlcyIsInRvcE1vc3ROb2RlcyIsIm9sZFgiLCJvbGRZIiwiY29udmVydFRvTW9kZWxQb3NpdGlvbiIsImRpbSIsImdldFByb2Nlc3Nlc09mU2VsZWN0ZWQiLCJzZWxlY3RlZEVsZXMiLCJleHRlbmROb2RlTGlzdCIsImdldE5laWdoYm91cnNPZlNlbGVjdGVkIiwiZWxlc1RvSGlnaGxpZ2h0IiwiZ2V0TmVpZ2hib3Vyc09mTm9kZXMiLCJfbm9kZXMiLCJhZGQiLCJkZXNjZW5kYW50cyIsIm5laWdoYm9yaG9vZEVsZXMiLCJuZWlnaGJvcmhvb2QiLCJlbGVzVG9SZXR1cm4iLCJub2Rlc1RvU2hvdyIsInNlbGYiLCJleHRlbmROb2RlVHlwZXMiLCJwcm9jZXNzZXMiLCJub25Qcm9jZXNzZXMiLCJuZWlnaGJvclByb2Nlc3NlcyIsInVuaW9uIiwibmVpZ2hib3JOb25Qcm9jZXNzZXMiLCJleHRlbmRSZW1haW5pbmdOb2RlcyIsIm5vZGVzVG9GaWx0ZXIiLCJhbGxOb2RlcyIsImdldFByb2Nlc3Nlc09mTm9kZXMiLCJub25lSXNOb3RIaWdobGlnaHRlZCIsInZpZXdVdGlsaXRpZXMiLCJoaWdobGlnaHRDbGFzc2VzIiwiZ2V0QWxsSGlnaGxpZ2h0Q2xhc3NlcyIsImlzIiwidW5zZWxlY3QiLCJub2Rlc1RvS2VlcCIsIm5vZGVzTm90VG9LZWVwIiwiZWxlcyIsInNob3dDb21wbGV4TmFtZSIsInRleHRXaWR0aCIsInRleHRQcm9wIiwiY29lZmYiLCJyYXRpbyIsImdldER5bmFtaWNMYWJlbFRleHRTaXplIiwiZ2V0U3RhdGVWYXJTaGFwZU9wdGlvbnMiLCJnZXRVbml0T2ZJbmZvU2hhcGVPcHRpb25zIiwib3B0cyIsImdldENhcmRpbmFsaXR5RGlzdGFuY2UiLCJzcmNQb3MiLCJzb3VyY2UiLCJ0Z3RQb3MiLCJjb2xsYXBzZWRDaGlsZHJlbiIsImNoaWxkIiwiY2hpbGRJbmZvIiwiZ2V0UXRpcENvbnRlbnQiLCJjb250ZW50SHRtbCIsInNiZ25zdGF0ZWFuZGluZm8iLCJzdGF0ZUxhYmVsIiwiZ2V0RHluYW1pY0xhYmVsU2l6ZUNvZWZmaWNpZW50IiwiZHluYW1pY0xhYmVsU2l6ZSIsIm1hcCIsImR5bmFtaWNMYWJlbFNpemVDb2VmZmljaWVudCIsImlzTm9kZSIsImNhbGwiLCJ0ZXh0SGVpZ2h0IiwiZWRnZSIsInNvdXJjZU9yVGFyZ2V0IiwicG9ydElkIiwiZW5kTm9kZSIsInNpZ24iLCJnZXRQb3J0c09yZGVyaW5nIiwiaXNQb3J0VGFyZ2V0T2ZBbnlFZGdlIiwiZWRnZXMiLCJwb3J0c29yZGVyaW5nIiwibGVmdFBvcnRJZCIsInRvcFBvcnRJZCIsIm9yZGVyaW5nIiwicG9ydERpc3RhbmNlIiwiaXNQb3J0U291cmNlT2ZBbnlFZGdlIiwiY3VycmVudE9yZGVyaW5nIiwicmVtb3ZlUG9ydHMiLCJhZGRQb3J0cyIsImRpc3QiLCJwb3J0c291cmNlIiwicG9ydHRhcmdldCIsImZpcnN0UG9ydElkIiwic2Vjb25kUG9ydElkIiwiZmlyc3RQb3J0Iiwic2Vjb25kUG9ydCIsImZyb21Mb3JUIiwiZWRnZUNsYXNzIiwibm9kZUlkIiwiYmVzdE9yaWVudGF0aW9uIiwiY2hhbmdlUG9ydHNPcmllbnRhdGlvbiIsImltcHJvdmVGbG93IiwicG9zdENoYW5nZVBvcnRzT3JpZW50YXRpb24iLCJwcm9jZXNzSWQiLCJ0YXJnZXRpbmdFZGdlcyIsInNvdXJjaW5nRWRnZXMiLCJzaW1wbGUiLCJjYWxjdWxhdGVPcmllbnRhdGlvblNjb3JlIiwiYmVzdFNjb3JlIiwicHJvcGVydHkiLCJvdGhlciIsImZpcnN0T3JpZW50YXRpb24iLCJvcHBvc2l0ZU9yaWVudGF0aW9uIiwic2NvcmUiLCJub2RlV2lkdGhPckhlaWdodCIsImlucHV0UG9ydCIsIm91dHB1dFBvcnQiLCJub3RDb25uZWN0ZWRUb1BvcnQiLCJhZGRTaW1wbGVOb2RlVG9BcnJheSIsIm1pbkxlbmd0aCIsImlucHV0UG9ydEVsZSIsInBvcCIsIm91dHB1dFBvcnRFbGUiLCJmaXJzdE5vZGUiLCJzZWNvbmROb2RlIiwic3dhcEVsZW1lbnRzIiwiZWZmZWN0b3IiLCJmaXJzdE91dHB1dCIsImZpcnN0T3V0cHV0U2NvcmUiLCJjaGVja05lZ2F0aXZlT3JpZW50YXRpb25TY29yZSIsImZpcnN0SW5wdXQiLCJmaXJzdElucHV0U2NvcmUiLCJhcnJheSIsImNvbm5lY3RlZFRvIiwibm9kZVNjb3JlIiwibm9kZVdpZHRoIiwibm9kZUhlaWdodCIsImZpcnN0RWxlIiwic2Vjb25kRWxlIiwidGVtcHgiLCJ0ZW1weSIsImV4dHJhQ29tcGxleFBhZGRpbmciLCJtYXJnaW4iLCJzZXRDbG9uZU1hcmtlclN0YXR1cyIsInN0YXR1cyIsImJnT2JqIiwiaW1ncyIsInNwbGl0IiwieFBvcyIsInlQb3MiLCJ3aWR0aHMiLCJoZWlnaHRzIiwiZml0cyIsIm9wYWNpdGllcyIsImpvaW4iLCJkZWZhdWx0UHJvcGVydGllcyIsImdldERlZmF1bHROb2RlUHJvcGVydGllcyIsImdldERlZmF1bHRFZGdlUHJvcGVydGllcyIsImdldERlZmF1bHRQcm9jZXNzU2l6ZSIsImdldERlZmF1bHRMb2dpY2FsT3BlcmF0b3JTaXplIiwiZ2V0RGVmYXVsdEJBU2l6ZSIsImRlZmF1bHRTaWZFZGdlQ29sb3JNYXAiLCJkZWZhdWx0U2l6ZU1hcCIsImdldERlZmF1bHRTaXplIiwiZ2V0RGVmYXVsdEZvbnRQcm9wZXJ0aWVzIiwiZ2V0RGVmYXVsdEluZm9ib3hQcm9wZXJ0aWVzIiwiaW5mb2JveFR5cGUiLCJnZXREZWZhdWx0SW5mb2JveEZvbnRTaXplIiwiZ2V0RGVmYXVsdEluZm9ib3hTaGFwZU5hbWUiLCJnZXREZWZhdWx0SW5mb2JveFNpemUiLCJmb250c2l6ZSIsInByb3BzIiwiZ2V0UHJvcCIsImV4dGVuZERhdGFXaXRoQ2xhc3NEZWZhdWx0cyIsInByb3BzVG9Ta2lwIiwiZGVmYXVsdFByb3BzIiwiZ2V0RGVmYXVsdFByb3BlcnRpZXMiLCJPYmplY3QiLCJrZXlzIiwiZXh0ZW5kTm9kZURhdGFXaXRoQ2xhc3NEZWZhdWx0cyIsImV4dGVuZEVkZ2VEYXRhV2l0aENsYXNzRGVmYXVsdHMiLCJnZXREZWZhdWx0SW5mb2JveFN0eWxlIiwiaW5mb2JveFN0eWxlIiwibm9uU3R5bGVQcm9wcyIsInB1cmVDbGFzcyIsInNldERlZmF1bHRQcm9wZXJ0aWVzIiwibG9ja0dyYXBoVG9wb2xvZ3kiLCJleHBhbmRDb2xsYXBzZSIsImRpc2FibGVDdWUiLCJ1bmxvY2tHcmFwaFRvcG9sb2d5IiwiZW5hYmxlQ3VlIiwiaXNHcmFwaFRvcG9sb2d5TG9ja2VkIiwibGFuZ3VhZ2VUb01hcFR5cGUiLCJsYW5nIiwibWFwVHlwZVRvTGFuZ3VhZ2UiLCJnZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5IiwiY29sbGVjdGlvbiIsImNvbGxhcHNlZE5vZGVzIiwiZ2V0Q29sbGFwc2VkQ2hpbGRyZW5SZWN1cnNpdmVseSIsImdldFdpZHRoQnlDb250ZW50IiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwicGFyc2VkRGF0YU1hcCIsInZpc2libGVEYXRhTWFwQnlFeHAiLCJncm91cGVkRGF0YU1hcCIsInZpc2libGVGaWxlcyIsImNvbG9yTWFwIiwiYWxsVmlzIiwiZmlsZURlc2NyaXB0aW9uIiwiZmlsZVRpdGxlIiwiZ2V0TmFtZSIsImZuYW1lIiwiZ2V0RGVzYyIsImZkZXNjIiwiZ2V0R3JvdXBlZERhdGFNYXAiLCJnZXRQYXJzZWREYXRhTWFwIiwiZ2V0VmlzaWJsZURhdGEiLCJoaWRlQWxsIiwiaW52aXNpYmxlRXhwIiwiaW52aXNpYmxlRmlsZSIsImZpbGVOYW1lIiwiaiIsImV4cE5hbWUiLCJzaG93RGF0YSIsInBhcmFtcyIsImhpZGVBbGxVbmRvIiwidW5oaWRlQWxsIiwidmlzaWJsZUV4cCIsInZpc2libGVGaWxlIiwidW5oaWRlQWxsVW5kbyIsInBhcnNlZCIsInZpc2libGUiLCJncm91cGVkIiwidmlzaWJsZWYiLCJpc1Zpc2libGUiLCJ2YWx1ZXMiLCJncm91cEFycmF5IiwiY291bnQiLCJrIiwiaW52aXNpYmxlIiwiY291bnRWaXNpYmxlRGF0YUJ5RXhwIiwiZGF0YUJveENvdW50IiwiZXhwIiwiZ2VuZXJhdGVTVkdGb3JOb2RlIiwidG9vbHRpcCIsInN2Z05hbWVTcGFjZSIsIm5vZGVMYWJlbCIsInJlcVdpZHRoIiwicmVxSGVpZ2h0Iiwib3ZlcmxheVJlY0JveFciLCJvdmVybGF5UmVjQm94SCIsInN2ZyIsImNyZWF0ZUVsZW1lbnROUyIsInNldEF0dHJpYnV0ZSIsIm92ZXJMYXlSZWN0QkJveCIsImZyZXF1ZW5jeURhdGEiLCJtYXhEYXRhQm94Q291bnQiLCJjb3VudGVyIiwiZGF0YVJlY3RhbmdsZUdlbmVyYXRvciIsIm92ZXJsYXlSZWN0IiwiYXBwZW5kQ2hpbGQiLCJpbnRlcnBvbGF0ZUNvbG9yIiwiY29sb3IxIiwiY29sb3IyIiwiZmFjdG9yIiwicmVzdWx0Iiwic2xpY2UiLCJyb3VuZCIsImRlY2lkZUNvbG9yIiwicGVyY2VudCIsInNvcnRlZCIsInByZXYiLCJuZXh0IiwiZyIsInN0ZXBzIiwicGFyZW50U1ZHIiwiY29sb3JTdHJpbmciLCJjb2xvciIsIm5vZGVDb2xsZWN0aW9uIiwiY29sbGFwc2VkQ2hpbGRyZW5Ob3RQYXJlbnQiLCJwYXJlbnRTZXQiLCJTZXQiLCJoYXMiLCJleHBhbmRhYmxlTm9kZXMiLCJkaWZmZXJlbmNlIiwiaW1hZ2VVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJvdXRlckhUTUwiLCJoZXhUb1JnYiIsImhleCIsInN1YnN0cmluZyIsImJpZ2ludCIsImlzSGV4IiwiaXNOYU4iLCJwYXJzZURhdGEiLCJlcnJvckNhbGxiYWNrIiwic2FtcGxlRXhwZXJpbWVudCIsImV4cGVyaW1lbnRzIiwiY29sb3JtIiwiZmlsZUQiLCJmaWxlTiIsImludHJlZ2V4IiwidmVyc2lvbiIsImNsciIsImxpbmVzIiwidXB0byIsIm1ldGFMaW5lcyIsInQiLCJ0cmltIiwiTmFOIiwibWV0YUxpbmVDb2x1bW5zIiwidHJpbW1lZCIsIk1JTl9WQUxVRSIsImxpbmVDb250ZW50IiwiZWxlU3ltYm9sIiwibWF0Y2giLCJjb2xvcnZhbHVlIiwiZ2V0RXhwZXJpbWVudGFsRGF0YSIsImI2NHRvQmxvYiIsImI2NERhdGEiLCJjb250ZW50VHlwZSIsInNsaWNlU2l6ZSIsImJ5dGVDaGFyYWN0ZXJzIiwiYXRvYiIsImJ5dGVBcnJheXMiLCJvZmZzZXQiLCJieXRlTnVtYmVycyIsIkFycmF5IiwiY2hhckNvZGVBdCIsImJ5dGVBcnJheSIsIlVpbnQ4QXJyYXkiLCJibG9iIiwiQmxvYiIsImxvYWRUZXh0RG9jIiwiZnVsbEZpbGVQYXRoIiwid2luZG93IiwiWE1MSHR0cFJlcXVlc3QiLCJ4aHR0cCIsIkFjdGl2ZVhPYmplY3QiLCJvdmVycmlkZU1pbWVUeXBlIiwib3BlbiIsInNlbmQiLCJyZXNwb25zZVRleHQiLCJsb2FkWE1MRG9jIiwicmVzcG9uc2VYTUwiLCJ0ZXh0VG9YbWxPYmplY3QiLCJkb2MiLCJhc3luYyIsImxvYWRYTUwiLCJwYXJzZXIiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJzYmdubWxUb0pzb24iLCJqc29uVG9Od3QiLCJ0ZFRvSnNvbiIsInNpZlRvSnNvbiIsIm53dFRvSnNvbiIsImpzb25Ub1NpZiIsInNiZ25tbFRvQ2QiLCJzYmdubWxUb1NibWwiLCJzYm1sVG9TYmdubWwiLCJ1cGRhdGVHcmFwaCIsInNhdmVBc1BuZyIsImZpbGVuYW1lIiwic2NhbGUiLCJiZyIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwicG5nQ29udGVudCIsInBuZyIsImZ1bGwiLCJiNjRkYXRhIiwic3Vic3RyIiwic2F2ZUFzSnBnIiwicXVhbGl0eSIsImpwZ0NvbnRlbnQiLCJqcGciLCJzYXZlQXNTdmciLCJzdmdDb250ZW50IiwibG9hZFNhbXBsZSIsImZvbGRlcnBhdGgiLCJmaWxlIiwic3RhcnRTcGlubmVyIiwibWF0Y2hSZXN1bHQiLCJyZW5kZXJJbmZvU3RyaW5nIiwicmVuZGVySW5mb1N0cmluZ0NvcHkiLCJyZWdleCIsIm1hdGNoZXMiLCJleGVjIiwiRnJvbUtlYmFiVG9DYW1lbENhc2UiLCJ4bWxPYmplY3QiLCJjb2xsYXBzZU1hcmtlZE5vZGVzIiwiZW5kU3Bpbm5lciIsImxvYWRTSUZGaWxlIiwibGF5b3V0QnkiLCJydW5MYXlvdXQiLCJydW4iLCJmaXQiLCJsb2FkRmlsZSIsImxvYWRUREZpbGUiLCJmdW5jdGlvbk5hbWUiLCJsb2FkU0JHTk1MRmlsZSIsImNhbGxiYWNrMSIsImNhbGxiYWNrMiIsImxvYWROd3RGaWxlIiwidXJsUGFyYW1zIiwibm9kZXNUb0NvbGxhcHNlIiwiY29sbGFwc2UiLCJjb252ZXJ0RmNuIiwiY2FsbGJhY2szIiwiY2FsbGJhY2s0IiwidGV4dFR5cGUiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiaW1hZ2VzRWxlbWVudE1hdGNoIiwiaW1hZ2VzRWxlbWVudCIsImltYWdlc0VsZW1lbnRNYXRjaERpcnR5IiwiY3lHcmFwaCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJyZWFkQXNUZXh0IiwibG9hZFNCR05NTFRleHQiLCJ0ZXh0RGF0YSIsInRpbGVJbmZvQm94ZXMiLCJzYXZlQXNTYmdubWwiLCJyZW5kZXJJbmZvIiwibWFwUHJvcGVydGllcyIsInNiZ25tbFRleHQiLCJjcmVhdGVTYmdubWwiLCJzYXZlQXNOd3QiLCJjcmVhdGVOd3QiLCJzYXZlQXNDZWxsRGVzaWduZXIiLCJzYmdubWwiLCJjb252ZXJ0U2Jnbm1sVG9DRCIsImxvYWRDZWxsRGVzaWduZXIiLCJzdWNjZXNzQ2FsbGJhY2siLCJjb252ZXJ0Q0RUb1NiZ25tbCIsInNhdmVBc1NibWwiLCJjb252ZXJ0U2JnbiIsImNvbnZlcnRTYmdubWxUb1NibWwiLCJtZXNzYWdlIiwibG9hZFNibWwiLCJjb252ZXJ0U2JtbFRvU2Jnbm1sIiwiZXhwb3J0TGF5b3V0RGF0YSIsImJ5TmFtZSIsImxheW91dFRleHQiLCJzYXZlQXNQbGFpblNpZiIsImNvbnZlcnRTYmdubWxUZXh0VG9Kc29uIiwiY29udmVydFNpZlRleHRUb0pzb24iLCJzaWZUZXh0IiwiY3JlYXRlSnNvbkZyb21TQkdOIiwiY3JlYXRlSnNvbkZyb21TaWYiLCJzYm1sIiwiZGlzYWJsZVBvcnRzIiwiZW5hYmxlUG9ydHMiLCJhcmVQb3J0c0VuYWJsZWQiLCJjb25zaWRlckNvbXBvdW5kU2l6ZXMiLCJvbWl0Q29tcG91bmRTaXplcyIsImFyZUNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkIiwibGF5b3V0T3B0aW9ucyIsInJlc2V0IiwicG9zaXRpb25NYXAiLCJwcmVmZXJlbmNlcyIsImFuaW1hdGUiLCJyYW5kb21pemUiLCJwb3NpdGlvbnMiLCJwZXJmb3JtTGF5b3V0IiwiZWRnZUVkaXRpbmciLCJpbml0QW5jaG9yUG9pbnRzIiwiY2FsY3VsYXRlUGFkZGluZ3MiLCJwYWRkaW5nUGVyY2VudCIsImNvbXBvdW5kUGFkZGluZyIsInRvdGFsIiwibnVtT2ZTaW1wbGVzIiwidGhlTm9kZSIsImNhbGNfcGFkZGluZyIsInJlY2FsY3VsYXRlUGFkZGluZ3MiLCJzZXRUb1N0ciIsInNldCIsInNpZkVkZ2VQcm9wSGFuZGxlck1hcCIsInNpZk5vZGVQcm9wSGFuZGxlck1hcCIsInNpZkluZm9ib3hQcm9wSGFuZGxlck1hcCIsImluZm9ib3hlcyIsImdseXBocyIsImdseXBoIiwiZXh0ZW5kT2JqZWN0c0RhdGEiLCJvYmpzIiwiZmlsdGVyRmNuIiwicHJvcEhhbmRsZXJNYXAiLCJleHRlbmRTdHlsZXNEYXRhIiwidG9FeHRlbmQiLCJleHRlbmRGcm9tIiwic3R5bGVOYW1lcyIsInN0eWxlTWFwIiwiZWwiLCJwcm9wZXJ0aWVzIiwiaWRMaXN0IiwiY3VyclZhbCIsIndhcm4iLCJidWlsZEpzT2JqIiwianNPYmoiLCJhcmNzIiwianNPYmpTdHlsZXMiLCJleHRlbnNpb24iLCJyZW5kZXJJbmZvcm1hdGlvbiIsImxpc3RPZlN0eWxlcyIsImFwcFN0eWxlcyIsInN0eWxlcyIsImJ1aWxkU3RyaW5nIiwibGlic2JnbmpzIiwicmVuZGVyRXh0ZW5zaW9uIiwiYW5ub3QiLCJwa2dWZXJzaW9uIiwicGtnTmFtZSIsInByZXR0eXByaW50IiwieG1sMmpzIiwibWFwUHJvcGVydGllc0J1aWxkZXIiLCJCdWlsZGVyIiwicm9vdE5hbWUiLCJjb21wb3VuZEV4dGVuc2lvbkJ1aWxkZXIiLCJtYXBJRCIsImdldFhNTFZhbGlkSWQiLCJoYXNFeHRlbnNpb24iLCJoYXNSZW5kZXJFeHRlbnNpb24iLCJhbGxDb2xsYXBzZWROb2RlcyIsImFsbENvbGxhcHNlZEVkZ2VzIiwibWFwTGFuZ3VhZ2UiLCJ4bWxIZWFkZXIiLCJ2ZXJzaW9uTm8iLCJTYmduIiwieG1sbnMiLCJNYXAiLCJsYW5ndWFnZSIsIkV4dGVuc2lvbiIsImdldFJlbmRlckV4dGVuc2lvblNiZ25tbCIsInNldEV4dGVuc2lvbiIsImV4cGVyaW1lbnREZXNjcmlwdGlvbiIsImJ1aWxkT2JqZWN0IiwiZ2x5cGhMaXN0IiwiZWFjaCIsImNoaWxkT2ZOb25lIiwiZ2V0R2x5cGhTYmdubWwiLCJhZGRHbHlwaCIsImdldEFyY1NiZ25tbCIsImFkZEFyYyIsImFkZE1hcCIsInhtbFN0cmluZyIsImhlYWRsZXNzIiwicmVuZGVyT3B0cyIsInByZXR0eSIsIkZyb21DYW1lbFRvS2ViYWJDYXNlIiwicmUiLCJ4bWxTdHJpbmdfY29ycmVjdExhYmVsIiwicDEiLCJwMiIsInhtbGJvZHkiLCJSZW5kZXJJbmZvcm1hdGlvbiIsImJhY2tncm91bmRDb2xvciIsImJhY2tncm91bmQiLCJwcm9ncmFtTmFtZSIsInByb2dyYW1WZXJzaW9uIiwibGlzdE9mQ29sb3JEZWZpbml0aW9ucyIsIkxpc3RPZkNvbG9yRGVmaW5pdGlvbnMiLCJjb2xvckRlZmluaXRpb24iLCJDb2xvckRlZmluaXRpb24iLCJhZGRDb2xvckRlZmluaXRpb24iLCJzZXRMaXN0T2ZDb2xvckRlZmluaXRpb25zIiwibGlzdE9mQmFja2dyb3VuZEltYWdlcyIsIkxpc3RPZkJhY2tncm91bmRJbWFnZXMiLCJpbWFnZXMiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJCYWNrZ3JvdW5kSW1hZ2UiLCJhZGRCYWNrZ3JvdW5kSW1hZ2UiLCJzZXRMaXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzIiwiTGlzdE9mU3R5bGVzIiwieG1sU3R5bGUiLCJTdHlsZSIsIlJlbmRlckdyb3VwIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsImZvbnRDb2xvciIsInN0cm9rZVdpZHRoIiwiYmFja2dyb3VuZEZpdCIsImJhY2tncm91bmRQb3NYIiwiYmFja2dyb3VuZFBvc1kiLCJiYWNrZ3JvdW5kV2lkdGgiLCJiYWNrZ3JvdW5kSGVpZ2h0IiwiYmFja2dyb3VuZEltYWdlT3BhY2l0eSIsImJhY2tncm91bmRPcGFjaXR5Iiwic2V0UmVuZGVyR3JvdXAiLCJhZGRTdHlsZSIsInNldExpc3RPZlN0eWxlcyIsImdldEFubm90YXRpb25FeHRlbnNpb24iLCJjeUVsZW1lbnQiLCJhbm5vdGF0aW9ucyIsImFubm90RXh0IiwiQW5ub3RhdGlvbiIsInJkZkVsZW1lbnQiLCJSZGZFbGVtZW50IiwiYW5ub3RJRCIsImN1cnJlbnRBbm5vdCIsInNlbGVjdGVkREIiLCJhbm5vdGF0aW9uVmFsdWUiLCJzZWxlY3RlZFJlbGF0aW9uIiwiYWRkQ3VzdG9tUHJvcGVydHkiLCJhZGRSZXNvdXJjZSIsInNldFJkZkVsZW1lbnQiLCJHbHlwaCIsImNsYXNzXyIsImNvbXBhcnRtZW50UmVmIiwic2V0TGFiZWwiLCJMYWJlbCIsInNldENsb25lIiwiQ2xvbmVUeXBlIiwic2V0QmJveCIsImFkZEdseXBoQmJveCIsImV4dHJhSW5mbyIsIm1pblciLCJtaW5IIiwiV0xCaWFzIiwiV1JCaWFzIiwiSFRCaWFzIiwiSEJCaWFzIiwiYWRkUG9ydCIsIlBvcnQiLCJib3hHbHlwaCIsInN0YXRlc2FuZGluZm9zSWQiLCJhZGRHbHlwaE1lbWJlciIsImFkZFN0YXRlQm94R2x5cGgiLCJhZGRJbmZvQm94R2x5cGgiLCJpc0VtcHR5T2JqZWN0IiwiZ2V0T3JDcmVhdGVFeHRlbnNpb24iLCJnbHlwaE1lbWJlckxpc3QiLCJzYmdudml6RXh0U3RyaW5nIiwiaGFzTmV3dEV4dCIsImhpZGRlbiIsImVsZW1lbnQiLCJhcmNUYXJnZXQiLCJhcmNTb3VyY2UiLCJhcmNJZCIsIkFyYyIsInNldFN0YXJ0IiwiU3RhcnRUeXBlIiwicnNjcmF0Y2giLCJzdGFydFgiLCJzdGFydFkiLCJzZWdwdHMiLCJnZXRBbmNob3JzQXNBcnJheSIsImFuY2hvclgiLCJhbmNob3JZIiwiYWRkTmV4dCIsIk5leHRUeXBlIiwic2V0RW5kIiwiRW5kVHlwZSIsImVuZFgiLCJlbmRZIiwiY2FyZGluYWxpdHkiLCJlZGdlYkJveCIsImJvdW5kaW5nQm94IiwiaW5jbHVkZUxhYmVscyIsImluY2x1ZGVOb2RlcyIsImluY2x1ZGVFZGdlcyIsImluY2x1ZGVPdmVybGF5cyIsIkJib3giLCJhZGRTdGF0ZUFuZEluZm9CYm94IiwiYm94QmJveCIsIm1haW5HbHlwaCIsIlN0YXRlVHlwZSIsInNldFN0YXRlIiwiZW50aXR5TmFtZSIsInNldEVudGl0eSIsImlzQ2hpbGQiLCJpc1ZhbGlkRW5kIiwiY29ubmVjdGVkTm9kZXMiLCJnZXRMYWJlbCIsImlzVmFsaWRMYWJlbCIsInNyY05hbWVzIiwidGd0TmFtZXMiLCJnZXROYW1lcyIsIm5hbWVzIiwicGNJRFNldCIsInNpdGVMb2NTZXQiLCJwY0lEcyIsInNpdGVMb2NhdGlvbnMiLCJzcmNOYW1lIiwidGd0TmFtZSIsImxpbmUiLCJhdHRyIiwiaXNJbnRlZ2VyRmllbGRJbnB1dCIsImlzRmxvYXRGaWVsZElucHV0IiwiaXNOdW1iZXJLZXkiLCJrZXlDb2RlIiwiaXNEb3RLZXkiLCJpc01pbnVzU2lnbktleSIsImlzTGVmdEtleSIsImlzUmlnaHRLZXkiLCJpc0JhY2tzcGFjZUtleSIsImlzVGFiS2V5IiwiaXNFbnRlcktleSIsImlzQ3RybE9yQ29tbWFuZFByZXNzZWQiLCJjdHJsS2V5IiwibWV0YUtleSIsImxvYWQiLCJnZXRMaW5lc0FycmF5IiwicG9zTWFwIiwidGFicyIsImdldFRhYnNBcnJheSIsIm1hdGNoaW5nTm9kZXMiLCJnZXROb2Rlc0J5TmFtZSIsImlkT3JOYW1lIiwicmVtb3ZlQ2xhc3MiLCJleHBhbmROb2RlcyIsIm5vZGVzVG9FeHBhbmQiLCJleHBhbmQiLCJjb2xsYXBzZU5vZGVzIiwiY29sbGFwc2libGVOb2RlcyIsImNvbGxhcHNlQ29tcGxleGVzIiwiY29tcGxleGVzIiwiY29sbGFwc2VSZWN1cnNpdmVseSIsImV4cGFuZENvbXBsZXhlcyIsImV4cGFuZFJlY3Vyc2l2ZWx5IiwiY29sbGFwc2VBbGwiLCJleHBhbmRBbGwiLCJ0aGlja2VuQm9yZGVyIiwiZGVmYXVsdEJvcmRlcldpZHRoIiwidGhpbkJvcmRlciIsImhpZGVFbGVzU2ltcGxlIiwiYWN0aW9ucyIsIm5vZGVzV2l0aEhpZGRlbk5laWdoYm9yIiwiaGlkZSIsImhpZGVOb2Rlc1NtYXJ0Iiwibm9kZXNUb0hpZGUiLCJzaG93Tm9kZXNTbWFydCIsInNob3dFbGVzIiwiaGlkZGVuRWxlcyIsIm5vZGVzVG9UaGluQm9yZGVyIiwibm9kZXNUb1RoaWNrZW5Cb3JkZXIiLCJlZGdlc1dpdGgiLCJzaG93QWxsIiwiZmlyc3RUaW1lIiwiaXNOZWVkMkhpZ2hsaWd0aCIsImVsZXMyaGlnaGxpZ3RoIiwiaGlnaGxpZ2h0Q2xhc3MiLCJoaWdobGlnaHRlZEVsZXMiLCJjb250YWlucyIsImhpZ2hsaWdodFNlbGVjdGVkIiwiX2VsZXMiLCJpZHgiLCJoaWdobGlnaHQiLCJoaWdobGlnaHROZWlnaGJvdXJzIiwic2VhcmNoQnlMYWJlbCIsIm5vZGVzVG9IaWdobGlnaHQiLCJ0b0xvd2VyQ2FzZSIsImhpZ2hsaWdodFByb2Nlc3NlcyIsInJlbW92ZUhpZ2hsaWdodHMiLCJsb2FkTGF5b3V0RGF0YSIsImdldExheW91dFRleHQiLCJub3RVbmRvYWJsZSIsImNvbnZlcnRTYmdubWxUb0pzb24iLCJjb252ZXJ0Tnd0VG9Kc29uIiwic2V0U2hvd0NvbXBsZXhOYW1lIiwiZ2V0TWFwUHJvcGVydGllcyIsIm1hcFByb3BlcnRpZXNUb09iaiIsImRvVmFsaWRhdGlvbiIsInNldENvbXBvdW5kUGFkZGluZyIsIm5ld1BhZGRpbmdWYWx1ZSIsImdldENvbXBvdW5kUGFkZGluZyIsInN0clRvU2V0Iiwic3BsaXRCeSIsIm1lbWJlciIsImdldEZpcnN0QnlUYWdOYW1lIiwidGFnTmFtZSIsImVscyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiaW5mb2JveEdseXBocyIsImluZm9ib3hHbHlwaCIsImV4dGVuZEVsZW1lbnRzRGF0YSIsImVsZXNEYXRhIiwiZ2V0WE1MRWxlQnlJZCIsInhtbEVsZSIsImdldEVsTWFwIiwiZ3JhcGhEYXRhIiwiYXBwbHlFeHRyYVN0eWxlc0RhdGEiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCIsImF0dHJUb1Byb3AiLCJlbE1hcCIsImdldEF0dHJpYnV0ZSIsImF0dHJOYW1lIiwiZ2V0QXJjQnlJZCIsImdldEdseXBoQnlJZCIsImRlZmF1bHRzIiwiaW1nUGF0aCIsImluZmVyTmVzdGluZ09uTG9hZCIsInBhcnNlU3RyaW5nIiwiaGFuZGxlZEVsZW1lbnRzIiwiaW5zZXJ0ZWROb2RlcyIsImNhbGN1bGF0ZWRDb21wb3VuZFBhZGRpbmciLCJnZXRBbGxDb21wYXJ0bWVudHMiLCJjb21wYXJ0bWVudHMiLCJjb21wYXJ0bWVudCIsImMxIiwiYzIiLCJpc0luQm91bmRpbmdCb3giLCJiYm94MSIsImJib3gyIiwiYmJveFByb3AiLCJiYm94Q2FsY3VsYXRlZCIsImNoaWxkTm9kZXMiLCJnbHlwaE1lbWJlcnMiLCJvcmlnaW5hbFciLCJvcmlnaW5hbEgiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1pbldpZHRoQmlhc0xlZnQiLCJtaW5XaWR0aEJpYXNSaWdodCIsIm1pbkhlaWdodEJpYXNCb3R0b20iLCJtaW5IZWlnaHRCaWFzVG9wIiwiY2FsY3VsYXRlRWxlbWVudFBhZGRpbmciLCJtaW5MZWZ0IiwibWF4UmlnaHQiLCJtaW5Ub3AiLCJtYXhCb3R0b20iLCJjaGlsZHJlbkJib3hXIiwiY2hpbGRyZW5CYm94SCIsIm1pbkxlZnRCb3JkZXIiLCJtYXhSaWdodEJvcmRlciIsIm1pblRvcEJvcmRlciIsIm1heEJvdHRvbUJvcmRlciIsImZyb21JbmZvQm94IiwiY2hpbGROb2RlQmJveCIsImNoaWxkUGFkZGluZyIsInN0YXRlQmJveCIsImF2ZXJhZ2VCb3JkZXJXaWR0aFciLCJhdmVyYWdlQm9yZGVyV2lkdGhIIiwiZXh0cmFMZWZ0IiwiZXh0cmFSaWdodCIsImV4dHJhVG9wIiwiZXh0cmFCb3R0b20iLCJzdGF0ZUFuZEluZm9CYm94UHJvcCIsInBhcmVudEJib3giLCJjb21wbGV4UGFkZGluZyIsImhhc1RvcEJvdHRvbUluZm8iLCJzdGF0ZUFuZEluZm8iLCJmaW5kQ2hpbGROb2RlcyIsImNoaWxkVGFnTmFtZSIsIm5vZGVUeXBlIiwiZmluZENoaWxkTm9kZSIsInN0YXRlQW5kSW5mb1Byb3AiLCJzdGF0ZUFuZEluZm9BcnJheSIsImNoaWxkR2x5cGhzIiwiaW5mbyIsImluZm9ib3hJZCIsImVudGl0eSIsImdldERlZmF1bHRTdGF0ZUFuZEluZm9TdHlsZSIsImd5bHBoIiwiYWRkUGFyZW50SW5mb1RvTm9kZSIsIm5vZGVPYmoiLCJhZGRDeXRvc2NhcGVKc05vZGUiLCJqc29uQXJyYXkiLCJzdHlsZU9iaiIsInBvcnRFbGVtZW50cyIsInBvcnRFbCIsInJlbGF0aXZlWFBvcyIsInJlbGF0aXZlWVBvcyIsImhhbmRsZUFubm90YXRpb25zIiwiZGlzcGxheSIsImhhc0hpZGRlbk5laWdoYm91ciIsInRoaWNrQm9yZGVyIiwiY29sbGFwc2VkIiwicG9zaXRpb25CZWZvcmVTYXZpbmciLCJjeXRvc2NhcGVKc05vZGUiLCJjeU9iamVjdCIsImRiRnJvbVVybCIsInJlZ2V4cCIsImZpbGxFbGVtZW50RGF0YUFubm90YXRpb24iLCJhbm5vdGF0aW9uSW5kZXgiLCJhbm5vdElkIiwiZ2V0QWxsSWRzIiwicmVzb3VyY2VzIiwiZ2V0UmVzb3VyY2VzT2ZJZCIsImN1c3RvbVByb3BlcnRpZXMiLCJnZXRDdXN0b21Qcm9wZXJ0aWVzT2ZJZCIsImdsb2JhbEFubm90SW5kZXgiLCJmdWxsUXVhbGlmaWVyIiwicmVsYXRpb24iLCJVdGlsIiwicmVkdWNlUHJlZml4IiwidHJhdmVyc2VOb2RlcyIsImVsSWQiLCJlbGVDbGFzcyIsImdseXBoQ2xhc3MiLCJnZXRQb3J0cyIsIl9jYWNoZWRQb3J0cyIsImdldEdseXBocyIsIl9jYWNoZWRHbHlwaHMiLCJpZDJnbHlwaCIsIl9pZDJnbHlwaCIsImdldEFyY3MiLCJfY2FjaGVkQXJjcyIsImlkMmFyYyIsIl9pZDJhcmMiLCJnZXRBcmNTb3VyY2VBbmRUYXJnZXQiLCJzb3VyY2VOb2RlSWQiLCJ0YXJnZXROb2RlSWQiLCJzb3VyY2VFeGlzdHMiLCJ0YXJnZXRFeGlzdHMiLCJwb3J0RWxzIiwicGFyZW50RWxlbWVudCIsImdldEFyY0FuY2hvclBvaW50UG9zaXRpb25zIiwiYW5jaG9yUG9pbnRQb3NpdGlvbnMiLCJuZXh0cyIsImFkZEN5dG9zY2FwZUpzRWRnZSIsInNvdXJjZUFuZFRhcmdldCIsImVkZ2VPYmoiLCJjdXJ2ZVN0eWxlIiwiY29udHJvbFBvaW50UG9zaXRpb25zIiwiYmVuZFBvaW50UG9zaXRpb25zIiwiaXNTaWZNZXRhRWRnZSIsInNpZk1ldGFFZGdlIiwiUGRFZGdlcyIsIkFmRWRnZXMiLCJjeXRvc2NhcGVKc0VkZ2UiLCJhcHBseVN0eWxlIiwiY29sb3JMaXN0IiwiY29sb3JEZWZpbml0aW9ucyIsImNvbG9ySURUb1ZhbHVlIiwiaW1hZ2VMaXN0IiwiYmFja2dyb3VuZEltYWdlcyIsImltYWdlSURUb1ZhbHVlIiwic3R5bGVMaXN0IiwibWVtYmVySURUb1N0eWxlIiwicmVuZGVyR3JvdXAiLCJoZXhUb0RlY2ltYWwiLCJjb252ZXJ0SGV4Q29sb3IiLCJub2RlUHJvcE1hcCIsImVkZ2VQcm9wTWFwIiwiaW5mb2JveFByb3BNYXAiLCJub2RlUHJvcERldGFpbHMiLCJlZGdlUHJvcERldGFpbHMiLCJpbmZvYm94UHJvcERldGFpbHMiLCJnZXRFbGVtZW50SWQiLCJnZXRJbmZvYm94SWQiLCJzZXRFbGVtZW50U3R5bGVQcm9wIiwic2V0SW5mb2JveFN0eWxlUHJvcCIsIm92ZXJyaWRlU3R5bGVQcm9wZXJ0aWVzIiwicHJvcE1hcCIsInByb3BEZXRhaWxzIiwiZ2V0SWQiLCJzZXRTdHlsZVByb3AiLCJtZW1iZXJTdHlsZSIsImZpZWxkTmFtZSIsImZpZWxkVmFsIiwiZGV0YWlscyIsImN5dG9zY2FwZUpzTm9kZXMiLCJjeXRvc2NhcGVKc0VkZ2VzIiwiY29tcGFydG1lbnRDaGlsZHJlbk1hcCIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZyb21YTUwiLCJtYXBzIiwibWluRGlzdGFuY2VUb0NoaWxkcmVuIiwiTUFYX1NBRkVfSU5URUdFUiIsImhhc01pbiIsIm5ld1BhZGRpbmciLCJjeXRvc2NhcGVKc0dyYXBoIiwic2hvdWxkRGlzYWJsZVBvcnRzIiwiZXJyb3JzIiwiY29udmVyc2lvbkFwaVVybCIsImRhdGFUeXBlIiwidGV4dFN0YXR1cyIsInhociIsImZhaWwiLCJnZXRFbXB0eUdyYXBoRGF0YSIsImluaXRHcmFwaFZhcmlhYmxlcyIsIm5hbWVUb05vZGUiLCJrZXlUb0VkZ2UiLCJub2RlV2l0aFNwZWNpZmllZENsYXNzIiwiZGVmYXVsdE5vZGVUeXBlIiwibWVyZ2VHcmFwaERhdGEiLCJncmFwaFRleHQiLCJub2RlTmFtZSIsImdldE9yQ3JlYXRlTm9kZSIsImVkZ2VUeXBlIiwic3JjQ2xhc3MiLCJnZXROb2RlQ2xhc3MiLCJ0Z3RDbGFzcyIsImdldE9yQ3JlYXRlRWRnZSIsImdldE5vZGVCeU5hbWUiLCJnZXRFZGdlQnlQcm9wcyIsImNhbGN1bGF0ZUVkZ2VLZXkiLCJtYXBOb2RlVG9OYW1lIiwibWFwRWRnZVRvS2V5Iiwic3JjIiwidGd0IiwiY2xhc3NOYW1lU3BlY2lmaWVkIiwidXBkYXRlV2l0aERlZmF1bHRzIiwiaXNEeW5hbWljTGFiZWwiLCJnZXRNYXBQcm9wZXJ0eSIsInVpZCIsInJvbGUiLCJzZXBhcmF0b3IiLCJub3RFbXB0eSIsInZhbGlkYXRlTm9kZVR5cGUiLCJfdHlwZSIsImhhc093blByb3BlcnR5IiwidmFsaWRhdGVFZGdlVHlwZSIsImNvbnZlcnRUeXBlVG9DbGFzcyIsImFkZEluZm9Cb3giLCJ1bml0T2ZJbmZvcm1hdGlvbiIsImdyYXBoRGF0YUluZGV4IiwiZWRnZXNTdGFydEluZGV4IiwiZm9ybWF0VmVyc2lvbiIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtYXBEZXNjcmlwdGlvbiIsIm1hcE5hbWUiLCJwYXJlbnRJRCIsIm5ld05vZGUiLCJncm91cCIsImVkZ2VJRCIsImVkZ2VTb3VyY2UiLCJlZGdlVGFyZ2V0IiwibmV3RWRnZSIsImpzR3JhcGgiLCJnZXRDb250ZXh0IiwibWVhc3VyZVRleHQiLCJlbGxpcHNpcyIsImZpbmFsTGVuZ3RoIiwic3VidGV4dCIsIm9yaWdpbmFsSWQiLCJ4bWxWYWxpZFJlZ2V4IiwidGVzdCIsIkRFRkFVTFRfTUFSR0lOIiwic2hvdWxkQXBwZW5kIiwidmFsaWRGb250U2l6ZSIsImlucHV0IiwidG9VcHBlckNhc2UiLCJjb250YWluZXJXaWR0aCIsImNvbnRhaW5lckhlaWdodCIsInByZXBlbmQiLCJwb3J0c0NvcHkiLCJwb3J0c1RvUmV0dXJuIiwib3JkZXJpbmdzVG9SZXR1cm4iLCJhcnJvd1NjYWxlIiwicmVjYWxjdWxhdGVMYXlvdXRPbkNvbXBsZXhpdHlNYW5hZ2VtZW50IiwicmVhcnJhbmdlT25Db21wbGV4aXR5TWFuYWdlbWVudCIsImFuaW1hdGVPbkRyYXdpbmdDaGFuZ2VzIiwiYWxsb3dDb21wb3VuZE5vZGVSZXNpemUiLCJtYXBDb2xvclNjaGVtZSIsIm1hcENvbG9yU2NoZW1lU3R5bGUiLCJlbmFibGVTSUZUb3BvbG9neUdyb3VwaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7O0FDVkEsQ0FBQyxZQUFVO0FBQ1QsTUFBSUEsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBU0MsUUFBVCxFQUFtQjtBQUUvQixRQUFJQyxLQUFLLEdBQUcsRUFBWixDQUYrQixDQUVmOztBQUVoQixRQUFJQyxlQUFlLEdBQUdDLG1CQUFPLENBQUMseUZB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SUFMRjtBQU1mcUIsa0JBQWdCLEVBQUUsSUFOSDtBQU9meXRCLG9CQUFrQixFQUFFLElBUEw7QUFRZi96QyxrQkFBZ0IsRUFBRSxJQVJIO0FBU2ZvVSxzQkFBb0IsRUFBRSxJQVRQO0FBVWZ1dkMseUNBQXVDLEVBQUUsSUFWMUI7QUFXZkMsaUNBQStCLEVBQUUsSUFYbEI7QUFZZkMseUJBQXVCLEVBQUUsSUFaVjtBQWFmaGtELHNDQUFvQyxFQUFFLElBYnZCO0FBY2YrK0IsYUFBVyxFQUFFLElBZEU7QUFlZmtsQix5QkFBdUIsRUFBRSxJQWZWO0FBZ0JmQyxnQkFBYyxFQUFFLElBaEJEO0FBaUJmQyxxQkFBbUIsRUFBRSxJQWpCTjtBQWtCZmxDLFNBQU8sRUFBRSxJQWxCTTtBQW1CZkQsZ0JBQWMsRUFBRSxJQW5CRDtBQW9CZm9DLDJCQUF5QixFQUFFLElBcEJaO0FBcUJmbmdCLHVCQUFxQixFQUFFO0FBckJSLENBQWpCLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNKQSxnRDs7Ozs7Ozs7Ozs7QUNBQSx3Qzs7Ozs7Ozs7Ozs7QUNBQSx5Qzs7Ozs7Ozs7Ozs7QUNBQSxvQzs7Ozs7O1VDQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7OztVQ3RCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJzYmdudml6LmpzIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wic2JnbnZpelwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJzYmdudml6XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiKGZ1bmN0aW9uKCl7XG4gIHZhciBzYmdudml6ID0gZnVuY3Rpb24oX29wdGlvbnMpIHtcblxuICAgIHZhciBwYXJhbSA9IHt9OyAvLyBUaGUgcGFyYW1ldGVyIHRvIGJlIHBhc3NlZCB0byBhbGwgdXRpbGl0aWVzIGluc3RhbmNlcyByZWxhdGVkIHRvIHRoaXMgc2JnbnZpeiBpbnN0YW5jZVxuXG4gICAgdmFyIG9wdGlvblV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL29wdGlvbi11dGlsaXRpZXMtZmFjdG9yeScpKCk7XG4gICAgdmFyIG9wdGlvbnMgPSBvcHRpb25VdGlsaXRpZXMuZXh0ZW5kT3B0aW9ucyhfb3B0aW9ucyk7XG5cbiAgICB2YXIgc2JnbkN5SW5zdGFuY2UgPSByZXF1aXJlKCcuL3NiZ24tZXh0ZW5zaW9ucy9zYmduLWN5LWluc3RhbmNlLWZhY3RvcnknKSgpO1xuXG4gICAgLy8gVXRpbGl0aWVzIHdob3NlIGZ1bmN0aW9ucyB3aWxsIGJlIGV4cG9zZWQgc2VwZXJhdGVseVxuICAgIHZhciB1aVV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL3VpLXV0aWxpdGllcy1mYWN0b3J5JykoKTtcbiAgICB2YXIgZmlsZVV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2ZpbGUtdXRpbGl0aWVzLWZhY3RvcnknKSgpO1xuICAgIHZhciBncmFwaFV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2dyYXBoLXV0aWxpdGllcy1mYWN0b3J5JykoKTtcbiAgICB2YXIgbWFpblV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL21haW4tdXRpbGl0aWVzLWZhY3RvcnknKSgpO1xuICAgIHZhciBrZXlib2FyZElucHV0VXRpbGl0aWVzID0gcmVxdWlyZSgnLi91dGlsaXRpZXMva2V5Ym9hcmQtaW5wdXQtdXRpbGl0aWVzLWZhY3RvcnknKSgpOyAvLyByZXF1aXJlIGtleWJvcmQgaW5wdXQgdXRpbGl0aWVzXG4gICAgdmFyIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5ID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvZXhwZXJpbWVudGFsLWRhdGEtb3ZlcmxheScpKCk7XG4gICAgLy8gVXRpbGl0aWVzIHRvIGJlIGV4cG9zZWQgYXMgaXNcbiAgICB2YXIgZWxlbWVudFV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2VsZW1lbnQtdXRpbGl0aWVzLWZhY3RvcnknKSgpO1xuICAgIHZhciB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL3VuZG8tcmVkby1hY3Rpb24tZnVuY3Rpb25zLWZhY3RvcnknKSgpO1xuXG4gICAgLy8gT3RoZXIgdXRpbGl0aWVzXG4gICAgdmFyIGpzb25Ub1NiZ25tbENvbnZlcnRlciA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2pzb24tdG8tc2Jnbm1sLWNvbnZlcnRlci1mYWN0b3J5JykoKTtcbiAgICB2YXIganNvblRvTnd0Q29udmVydGVyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvanNvbi10by1ud3QtY29udmVydGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBzYmdubWxUb0pzb25Db252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9zYmdubWwtdG8tanNvbi1jb252ZXJ0ZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIG53dFRvSnNvbkNvbnZlcnRlciA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL253dC10by1qc29uLWNvbnZlcnRlci1mYWN0b3J5JykoKTtcbiAgICB2YXIgdGRUb0pzb25Db252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy90YWItZGVsaW1pdGVkLXRvLWpzb24tY29udmVydGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBzaWZUb0pzb25Db252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9zaWYtdG8tanNvbi1jb252ZXJ0ZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIGpzb25Ub1NpZkNvbnZlcnRlciA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2pzb24tdG8tc2lmLWNvbnZlcnRlci1mYWN0b3J5JykoKTtcbiAgICB2YXIgY2xhc3NlcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2NsYXNzZXMnKTtcbiAgICB2YXIgdGRQYXJzZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy90YWItZGVsaW1ldGVkLXBhcnNlcicpO1xuICAgIHZhciBsYXlvdXRMb2FkZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9sYXlvdXQtbG9hZGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBsYXlvdXRUb1RleHQgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9sYXlvdXQtdG8tdGV4dC1mYWN0b3J5JykoKTtcbiAgICB2YXIgY2RUb1NiZ25tbENvbnZlcnRlciA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2NkLXRvLXNiZ25tbC1jb252ZXJ0ZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIHNiZ25tbFRvQ2RDb252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9zYmdubWwtdG8tY2QtY29udmVydGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBzYmdubWxUb1NibWxDb252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9zYmdubWwtdG8tc2JtbC1jb252ZXJ0ZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIHNibWxUb1NiZ25tbENvbnZlcnRlciA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL3NibWwtdG8tc2Jnbm1sLWNvbnZlcnRlci1mYWN0b3J5JykoKTtcbiAgICAvLyBGaWxsIHBhcmFtIG9iamVjdCB0byB1c2UgaXQgdXRpbGl0aWVzIGludGVybmFsbHlcbiAgICBcbiAgICBwYXJhbS5vcHRpb25VdGlsaXRpZXMgPSBvcHRpb25VdGlsaXRpZXM7XG4gICAgcGFyYW0uc2JnbkN5SW5zdGFuY2UgPSBzYmduQ3lJbnN0YW5jZTtcbiAgICBwYXJhbS51aVV0aWxpdGllcyA9IHVpVXRpbGl0aWVzO1xuICAgIHBhcmFtLmZpbGVVdGlsaXRpZXMgPSBmaWxlVXRpbGl0aWVzO1xuICAgIHBhcmFtLmdyYXBoVXRpbGl0aWVzID0gZ3JhcGhVdGlsaXRpZXM7XG4gICAgcGFyYW0ubWFpblV0aWxpdGllcyA9IG1haW5VdGlsaXRpZXM7XG4gICAgcGFyYW0ua2V5Ym9hcmRJbnB1dFV0aWxpdGllcyA9IGtleWJvYXJkSW5wdXRVdGlsaXRpZXM7XG4gICAgcGFyYW0uZWxlbWVudFV0aWxpdGllcyA9IGVsZW1lbnRVdGlsaXRpZXM7XG4gICAgcGFyYW0udW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucztcbiAgICBwYXJhbS5qc29uVG9TYmdubWxDb252ZXJ0ZXIgPSBqc29uVG9TYmdubWxDb252ZXJ0ZXI7XG4gICAgcGFyYW0uanNvblRvTnd0Q29udmVydGVyID0ganNvblRvTnd0Q29udmVydGVyO1xuICAgIHBhcmFtLnNiZ25tbFRvSnNvbkNvbnZlcnRlciA9IHNiZ25tbFRvSnNvbkNvbnZlcnRlcjtcbiAgICBwYXJhbS5ud3RUb0pzb25Db252ZXJ0ZXIgPSBud3RUb0pzb25Db252ZXJ0ZXI7XG4gICAgcGFyYW0udGRUb0pzb25Db252ZXJ0ZXIgPSB0ZFRvSnNvbkNvbnZlcnRlcjtcbiAgICBwYXJhbS5zaWZUb0pzb25Db252ZXJ0ZXIgPSBzaWZUb0pzb25Db252ZXJ0ZXI7XG4gICAgcGFyYW0uY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgcGFyYW0ubGF5b3V0TG9hZGVyID0gbGF5b3V0TG9hZGVyO1xuICAgIHBhcmFtLmxheW91dFRvVGV4dCA9IGxheW91dFRvVGV4dDtcbiAgICBwYXJhbS5qc29uVG9TaWZDb252ZXJ0ZXIgPSBqc29uVG9TaWZDb252ZXJ0ZXI7XG4gICAgcGFyYW0uY2RUb1NiZ25tbENvbnZlcnRlciA9IGNkVG9TYmdubWxDb252ZXJ0ZXI7XG4gICAgcGFyYW0uc2Jnbm1sVG9DZENvbnZlcnRlciA9IHNiZ25tbFRvQ2RDb252ZXJ0ZXI7XG4gICAgcGFyYW0uc2Jnbm1sVG9TYm1sQ29udmVydGVyID0gc2Jnbm1sVG9TYm1sQ29udmVydGVyO1xuICAgIHBhcmFtLnNibWxUb1NiZ25tbENvbnZlcnRlciA9IHNibWxUb1NiZ25tbENvbnZlcnRlcjtcbiAgICBwYXJhbS5leHBlcmltZW50YWxEYXRhT3ZlcmxheSA9IGV4cGVyaW1lbnRhbERhdGFPdmVybGF5O1xuXG4gICAgLy8gY2FsbCBjb25zdHJ1Y3RvcnMgb2Ygb2JqZWN0cyB3aXRoIHBhcmFtXG4gICAgXG4gICAgc2JnbkN5SW5zdGFuY2UocGFyYW0pO1xuICAgIG9wdGlvblV0aWxpdGllcyhwYXJhbSk7XG4gICAgdWlVdGlsaXRpZXMocGFyYW0pO1xuICAgIGZpbGVVdGlsaXRpZXMocGFyYW0pO1xuICAgIGdyYXBoVXRpbGl0aWVzKHBhcmFtKTtcbiAgICBtYWluVXRpbGl0aWVzKHBhcmFtKTtcbiAgICBrZXlib2FyZElucHV0VXRpbGl0aWVzKHBhcmFtKTtcbiAgICBlbGVtZW50VXRpbGl0aWVzKHBhcmFtKTtcbiAgICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucyhwYXJhbSk7XG4gICAganNvblRvU2Jnbm1sQ29udmVydGVyKHBhcmFtKTtcbiAgICBqc29uVG9Od3RDb252ZXJ0ZXIocGFyYW0pO1xuICAgIHNiZ25tbFRvSnNvbkNvbnZlcnRlcihwYXJhbSk7XG4gICAgbnd0VG9Kc29uQ29udmVydGVyKHBhcmFtKTtcbiAgICB0ZFRvSnNvbkNvbnZlcnRlcihwYXJhbSk7XG4gICAgc2lmVG9Kc29uQ29udmVydGVyKHBhcmFtKTtcbiAgICBsYXlvdXRMb2FkZXIocGFyYW0pO1xuICAgIGxheW91dFRvVGV4dChwYXJhbSk7XG4gICAganNvblRvU2lmQ29udmVydGVyKHBhcmFtKTtcbiAgICBjZFRvU2Jnbm1sQ29udmVydGVyKHBhcmFtKTtcbiAgICBzYmdubWxUb0NkQ29udmVydGVyKHBhcmFtKTtcbiAgICBzYmdubWxUb1NibWxDb252ZXJ0ZXIocGFyYW0pO1xuICAgIHNibWxUb1NiZ25tbENvbnZlcnRlcihwYXJhbSk7XG4gICAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkocGFyYW0pO1xuXG4gICAgLy8gc2V0IHNjcmF0Y2ggcGFkIGZvciBzYmdudml6IGFuZCBpbml0IHNiZ252aXpQYXJhbXMgaW5zaWRlIGl0XG4gICAgc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKS5zY3JhdGNoKCdfc2JnbnZpeicsIHt9KTtcbiAgICBzYmduQ3lJbnN0YW5jZS5nZXRDeSgpLnNjcmF0Y2goJ19zYmdudml6Jykuc2JnbnZpelBhcmFtcyA9IHBhcmFtO1xuXG4gICAgLy8gRXhwb3NlIHRoZSBhcGlcbiAgICB2YXIgYXBpID0ge307XG5cbiAgICAvLyBFeHBvc2UgZWxlbWVudFV0aWxpdGllcyBhbmQgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgYXMgaXMsIG1vc3QgdXNlcnMgd2lsbCBub3QgbmVlZCB0aGVzZVxuICAgIGFwaS5lbGVtZW50VXRpbGl0aWVzID0gZWxlbWVudFV0aWxpdGllcztcbiAgICBhcGkudW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgPSB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucztcbiAgICAvL2FwaS5leHBlcmltZW50YWxEYXRhT3ZlcmxheSA9IGV4cGVyaW1lbnRhbERhdGFPdmVybGF5O1xuICAgIFxuICAgIC8vZXhwb3NlIHV0aWxpdHkgb2YgZXhwZXJpbWVudGFsIGRhdGEtb3ZlcmxheVxuICAgIGZvciAodmFyIHByb3AgaW4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkpIHtcbiAgICAgIGFwaVtwcm9wXSA9IGV4cGVyaW1lbnRhbERhdGFPdmVybGF5W3Byb3BdO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBlYWNoIG1haW4gdXRpbGl0eSBzZXBlcmF0ZWx5XG4gICAgZm9yICh2YXIgcHJvcCBpbiBtYWluVXRpbGl0aWVzKSB7XG4gICAgICBhcGlbcHJvcF0gPSBtYWluVXRpbGl0aWVzW3Byb3BdO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBlYWNoIGZpbGUgdXRpbGl0eSBzZXBlcmF0ZWx5XG4gICAgZm9yICh2YXIgcHJvcCBpbiBmaWxlVXRpbGl0aWVzKSB7XG4gICAgICBhcGlbcHJvcF0gPSBmaWxlVXRpbGl0aWVzW3Byb3BdO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBlYWNoIGZpbGUgdXRpbGl0eSBzZXBlcmF0ZWx5XG4gICAgZm9yICh2YXIgcHJvcCBpbiB1aVV0aWxpdGllcykge1xuICAgICAgYXBpW3Byb3BdID0gdWlVdGlsaXRpZXNbcHJvcF07XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIGVhY2ggc2JnbiBncmFwaCB1dGlsaXR5IHNlcGVyYXRlbHlcbiAgICBmb3IgKHZhciBwcm9wIGluIGdyYXBoVXRpbGl0aWVzKSB7XG4gICAgICBhcGlbcHJvcF0gPSBncmFwaFV0aWxpdGllc1twcm9wXTtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgZ2V0IGN5IGZ1bmN0aW9uIHRvIGVuYWJsZSBhY2Nlc3NpbmcgcmVsYXRlZCBjeSBpbnN0YW5jZVxuICAgIGFwaS5nZXRDeSA9IHNiZ25DeUluc3RhbmNlLmdldEN5O1xuXG4gICAgLy8gRXhwb3NlIHNvbWUgdXRpbGl0aWVzIGRpcmVjdGx5IGhlcmVcbiAgICBhcGkuY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgYXBpLnRkUGFyc2VyID0gdGRQYXJzZXI7XG5cbiAgICByZXR1cm4gYXBpO1xuICB9O1xuXG4gIHNiZ252aXoudmFsaWRNYXBQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvdmFsaWRNYXBQcm9wZXJ0aWVzJyk7XG5cbiAgc2JnbnZpei5yZWdpc3RlciA9IGZ1bmN0aW9uIChfbGlicykge1xuXG4gICAgdmFyIGxpYnMgPSB7fTtcbiAgICBsaWJzLmpRdWVyeSA9IF9saWJzLmpRdWVyeSB8fCBqUXVlcnk7XG4gICAgbGlicy5jeXRvc2NhcGUgPSBfbGlicy5jeXRvc2NhcGUgfHwgY3l0b3NjYXBlO1xuICAgIGxpYnMuc2F2ZUFzID0gX2xpYnMuZmlsZXNhdmVyID8gX2xpYnMuZmlsZXNhdmVyLnNhdmVBcyA6IHNhdmVBcztcbiAgICBsaWJzLnRpcHB5ID0gX2xpYnMudGlwcHkgfHwgVGlwcHk7XG5cbiAgICAvLyBTZXQgdGhlIGxpYnJhcmllcyB0byBhY2Nlc3MgdGhlbSBmcm9tIGFueSBmaWxlXG4gICAgdmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMnKTtcbiAgICBsaWJVdGlsaXRpZXMuc2V0TGlicyhsaWJzKTtcblxuICAgIHZhciBzYmduUmVuZGVyZXIgPSByZXF1aXJlKCcuL3NiZ24tZXh0ZW5zaW9ucy9zYmduLWN5LXJlbmRlcmVyJyk7XG4gICAgc2JnblJlbmRlcmVyKCk7XG4gIH07XG5cbiAgaWYgKCB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cyApIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IHNiZ252aXo7XG4gIH1cbn0pKCk7XG4iLCJ2YXIgY2xhc3NlcyA9IHJlcXVpcmUoJy4uL3V0aWxpdGllcy9jbGFzc2VzJyk7XG52YXIgbGlicyA9IHJlcXVpcmUoJy4uL3V0aWxpdGllcy9saWItdXRpbGl0aWVzJykuZ2V0TGlicygpO1xudmFyIGpRdWVyeSA9ICQgPSBsaWJzLmpRdWVyeTtcbnZhciBjeXRvc2NhcGUgPSBsaWJzLmN5dG9zY2FwZTtcbnZhciBUaXBweSA9IGxpYnMudGlwcHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXG5cdHZhciBlbGVtZW50VXRpbGl0aWVzLCBncmFwaFV0aWxpdGllcywgbWFpblV0aWxpdGllcywgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMsIG9wdGlvblV0aWxpdGllcywgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXk7XG5cdHZhciByZWZyZXNoUGFkZGluZ3MsIG9wdGlvbnMsIGN5O1xuXG5cdHZhciBzYmduQ3lJbnN0YW5jZSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuXHRcdGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuXHRcdGdyYXBoVXRpbGl0aWVzID0gcGFyYW0uZ3JhcGhVdGlsaXRpZXM7XG5cdFx0ZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkgPSBwYXJhbS5leHBlcmltZW50YWxEYXRhT3ZlcmxheTtcbiAgICBtYWluVXRpbGl0aWVzID0gcGFyYW0ubWFpblV0aWxpdGllcztcblx0XHR1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucyA9IHBhcmFtLnVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zO1xuXHRcdHJlZnJlc2hQYWRkaW5ncyA9IGdyYXBoVXRpbGl0aWVzLnJlZnJlc2hQYWRkaW5ncy5iaW5kKGdyYXBoVXRpbGl0aWVzKTtcblxuXHRcdG9wdGlvblV0aWxpdGllcyA9IHBhcmFtLm9wdGlvblV0aWxpdGllcztcblx0XHRvcHRpb25zID0gb3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcblxuXHRcdC8vIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcblxuXHRcdC8qXG5cdFx0ICogUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGxvY2F0ZWQgb24gdGhlIGdpdmVuIGFuZ2xlIG9uIHRoZSBjaXJjbGUgd2l0aCB0aGUgZ2l2ZW4gY2VudGVyYWwgY29vcmRpbmF0ZXMgYW5kIHJhZGl1cy5cblx0XHQgKi9cblx0XHR2YXIgZ2V0UG9pbnRPbkNpcmNsZSA9IGZ1bmN0aW9uKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgYW5nbGVJbkRlZ3JlZSkge1xuXHRcdFx0dmFyIGFuZ2xlSW5SYWRpYW4gPSBhbmdsZUluRGVncmVlICogKCBNYXRoLlBJIC8gMTgwICk7IC8vIENvbnZlcnQgZGVncmVlIHRvIHJhZGlhblxuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogcmFkaXVzICogTWF0aC5jb3MoYW5nbGVJblJhZGlhbikgKyBjZW50ZXJYLFxuXHRcdFx0XHR5OiAtMSAqIHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlSW5SYWRpYW4pICsgY2VudGVyWSAvLyBXZSBtdWx0aXBseSB3aXRoIC0xIGhlcmUgYmVjYXVzZSBKUyB5IGNvb3JkaW5hdGUgc2lnbiBpcyB0aGUgb3Bvc2l0ZSBvZiB0aGUgTWF0aGFtYXRpY2FsIGNvb3JkaW5hdGVzIHN5c3RlbVxuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Lypcblx0XHQgKiBHZW5lcmF0ZXMgYSBwb2x5Z29uIHN0cmluZyBhcHByb3hpbWF0aW5nIGEgY2lyY2xlIHdpdGggZ2l2ZW4gY2VudGVyLCByYWRpdXMsIHN0YXJ0LCBlbmQgYW5nbGVzIGFuZCBudW1iZXIgb2YgcG9pbnRzIHRvIHJlcHJlc2VudCB0aGUgY2lyY2xlXG5cdFx0ICovXG5cdFx0dmFyIGdlbmVyYXRlQ2lyY2xlU3RyaW5nID0gZnVuY3Rpb24oY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBhbmdsZUZyb20sIGFuZ2xlVG8sIG51bU9mUG9pbnRzKSB7XG5cdFx0XHR2YXIgY2lyY2xlU3RyID0gXCJcIjtcblx0XHRcdHZhciBzdGVwU2l6ZSA9ICggYW5nbGVUbyAtIGFuZ2xlRnJvbSApIC8gbnVtT2ZQb2ludHM7IC8vIFdlIHdpbGwgaW5jcmVtZW50IHRoZSBjdXJyZW50IGFuZ2xlIGJ5IHN0ZXAgc2l6ZSBpbiBlYWNoIGl0ZXJhdGlvblxuXHRcdFx0dmFyIGN1cnJlbnRBbmdsZSA9IGFuZ2xlRnJvbTsgLy8gY3VycmVudCBhbmdsZSB3aWxsIGJlIHVwZGF0ZWQgaW4gZWFjaCBpdGVyYXRpb25cblxuXHRcdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgbnVtT2ZQb2ludHM7IGkrKyApIHtcblx0XHRcdFx0dmFyIHBvaW50ID0gZ2V0UG9pbnRPbkNpcmNsZShjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIGN1cnJlbnRBbmdsZSk7XG5cdFx0XHRcdGN1cnJlbnRBbmdsZSArPSBzdGVwU2l6ZTtcblx0XHRcdFx0Y2lyY2xlU3RyICs9IHBvaW50LnggKyBcIiBcIiArIHBvaW50LnkgKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNpcmNsZVN0cjtcblx0XHR9O1xuXG5cdFx0Lypcblx0XHQgKiAgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBwcm9jZXNzZXMvbG9naWNhbCBvcGVyYXRvcnMgd2l0aCBwb3J0cy5cblx0XHQgKiAgbGluZUhXOiBIYWxmIHdpZHRoIG9mIGxpbmUgdGhyb3VnaCB0aGUgY2lyY2xlIHRvIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnRcblx0XHQgKiAgc2hhcGVIVzogSGFsZiB3aWR0aCBvZiB0aGUgc2hhcGUgZGlzY2x1ZGluZyB0aGUgcG9ydHMgKEl0IGlzIHJhZGl1cyBmb3IgdGhlIGNpcmN1bGFyIHNoYXBlcylcblx0XHQgKiAgdHlwZTogVHlwZSBvZiB0aGUgc2hhcGUgZGlzY2x1ZGluZyB0aGUgcG9ydHMuIE9wdGlvbnMgYXJlICdjaXJjbGUnLCAncmVjdGFuZ2xlJ1xuXHRcdCAqICBvcmllbnRhdGlvbjogT3JpZW50YXRpb24gb2YgdGhlIHBvcnRzIE9wdGlvbnMgYXJlICdob3Jpem9udGFsJywgJ3ZlcnRpY2FsJ1xuXHRcdCAqL1xuXG5cdFx0dmFyIGdlbmVyYXRlU2hhcGVXaXRoUG9ydFN0cmluZyA9IGZ1bmN0aW9uKGxpbmVIVywgc2hhcGVIVywgdHlwZSwgb3JpZW50YXRpb24pIHtcblx0XHRcdHZhciBwb2x5Z29uU3RyO1xuXHRcdCAgICB2YXIgbnVtT2ZQb2ludHMgPSAzMDsgLy8gTnVtYmVyIG9mIHBvaW50cyB0aGF0IGJvdGggaGFsdmVzIG9mIGNpcmNsZSB3aWxsIGhhdmVcblx0XHRcdGlmIChvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG5cdFx0XHRcdHZhciBhYm92ZVBvaW50cywgYmVsb3dQb2ludHM7XG5cblx0XHRcdFx0aWYgKHR5cGUgPT09ICdjaXJjbGUnKSB7XG5cdFx0XHRcdFx0YWJvdmVQb2ludHMgPSBnZW5lcmF0ZUNpcmNsZVN0cmluZygwLCAwLCBzaGFwZUhXLCAxODAsIDAsIG51bU9mUG9pbnRzKTtcblx0XHRcdFx0XHRiZWxvd1BvaW50cyA9IGdlbmVyYXRlQ2lyY2xlU3RyaW5nKDAsIDAsIHNoYXBlSFcsIDM2MCwgMTgwLCBudW1PZlBvaW50cyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAodHlwZSA9PT0gJ3JlY3RhbmdsZScpIHtcblx0XHRcdFx0XHRhYm92ZVBvaW50cyA9ICctJyArIHNoYXBlSFcgKyAnIC0nICsgc2hhcGVIVyArICcgJyArIHNoYXBlSFcgKyAnIC0nICsgc2hhcGVIVyArICcgJztcblx0XHRcdFx0XHRiZWxvd1BvaW50cyA9IHNoYXBlSFcgKyAnICcgKyBzaGFwZUhXICsgJyAtJyArIHNoYXBlSFcgKyAnICcgKyBzaGFwZUhXICsgJyAnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cG9seWdvblN0ciA9IFwiLTEgLVwiICsgbGluZUhXICsgXCIgLVwiICsgc2hhcGVIVyArIFwiIC1cIiArIGxpbmVIVyArIFwiIFwiO1xuXHRcdFx0XHRwb2x5Z29uU3RyICs9IGFib3ZlUG9pbnRzO1xuXHRcdFx0XHRwb2x5Z29uU3RyICs9IHNoYXBlSFcgKyBcIiAtXCIgKyBsaW5lSFcgKyBcIiAxIC1cIiArIGxpbmVIVyArIFwiIDEgXCIgKyBsaW5lSFcgKyBcIiBcIiArIHNoYXBlSFcgKyBcIiBcIiArIGxpbmVIVyArIFwiIFwiO1xuXHRcdFx0XHRwb2x5Z29uU3RyICs9IGJlbG93UG9pbnRzO1xuXHRcdFx0XHRwb2x5Z29uU3RyICs9IFwiLVwiICsgc2hhcGVIVyArIFwiIFwiICsgbGluZUhXICsgXCIgLTEgXCIgKyBsaW5lSFc7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dmFyIGxlZnRQb2ludHMsIHJpZ2h0UG9pbnRzO1xuXG5cdFx0XHRcdGlmICh0eXBlID09PSAnY2lyY2xlJykge1xuXHRcdFx0XHRcdGxlZnRQb2ludHMgPSBnZW5lcmF0ZUNpcmNsZVN0cmluZygwLCAwLCBzaGFwZUhXLCA5MCwgMjcwLCBudW1PZlBvaW50cyk7XG5cdFx0XHRcdFx0cmlnaHRQb2ludHMgPSBnZW5lcmF0ZUNpcmNsZVN0cmluZygwLCAwLCBzaGFwZUhXLCAtOTAsIDkwLCBudW1PZlBvaW50cyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAodHlwZSA9PT0gJ3JlY3RhbmdsZScpIHtcblx0XHRcdFx0XHRsZWZ0UG9pbnRzID0gJy0nICsgc2hhcGVIVyArICcgLScgKyBzaGFwZUhXICsgJyAtJyArIHNoYXBlSFcgKyAnICcgKyBzaGFwZUhXICsgJyAnO1xuXHRcdFx0XHRcdHJpZ2h0UG9pbnRzID0gc2hhcGVIVyArICcgJyArIHNoYXBlSFcgKyAnICcgKyBzaGFwZUhXICsgJyAtJyArIHNoYXBlSFcgKyAnICc7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwb2x5Z29uU3RyID0gXCItXCIgKyBsaW5lSFcgKyBcIiAtXCIgKyAxICsgXCIgLVwiICsgbGluZUhXICsgXCIgLVwiICsgc2hhcGVIVyArIFwiIFwiO1xuXHRcdFx0XHRwb2x5Z29uU3RyICs9IGxlZnRQb2ludHM7XG5cdFx0XHRcdHBvbHlnb25TdHIgKz0gXCItXCIgKyBsaW5lSFcgKyBcIiBcIiArIHNoYXBlSFcgKyBcIiAtXCIgKyBsaW5lSFcgKyBcIiAxIFwiICsgbGluZUhXICsgXCIgMSBcIiArIGxpbmVIVyArIFwiIFwiICsgc2hhcGVIVyArIFwiIFwiO1xuXHRcdFx0XHRwb2x5Z29uU3RyICs9IHJpZ2h0UG9pbnRzO1xuXHRcdFx0XHRwb2x5Z29uU3RyICs9IGxpbmVIVyArIFwiIC1cIiArIHNoYXBlSFcgKyBcIiBcIiArIGxpbmVIVyArIFwiIC0xXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwb2x5Z29uU3RyO1xuXHRcdH07XG5cblx0XHQvLyBOb3RlIHRoYXQgaW4gQ2hpU0UgdGhpcyBmdW5jdGlvbiBpcyBpbiBhIHNlcGVyYXRlIGZpbGUgYnV0IGluIHRoZSB2aWV3ZXIgaXQgaGFzIGp1c3QgMiBtZXRob2RzIGFuZCBzbyBpdCBpcyBsb2NhdGVkIGluIHRoaXMgZmlsZVxuXHQgIGZ1bmN0aW9uIHJlZ2lzdGVyVW5kb1JlZG9BY3Rpb25zKCkge1xuXHQgICAgLy8gY3JlYXRlIG9yIGdldCB0aGUgdW5kby1yZWRvIGluc3RhbmNlXG5cdCAgICB2YXIgdXIgPSBjeS51bmRvUmVkbygpO1xuXG5cdCAgICAvLyByZWdpc3RlciBnZW5lcmFsIGFjdGlvbnNcblx0ICAgIC8vIHJlZ2lzdGVyIGFkZCByZW1vdmUgYWN0aW9uc1xuXHQgICAgdXIuYWN0aW9uKFwiZGVsZXRlRWxlc1NpbXBsZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXN0b3JlRWxlcyk7XG5cdCAgICB1ci5hY3Rpb24oXCJkZWxldGVOb2Rlc1NtYXJ0XCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZU5vZGVzU21hcnQsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlc3RvcmVFbGVzKTtcblx0XHR1ci5hY3Rpb24oXCJzZXRQb3J0c09yZGVyaW5nXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldFBvcnRzT3JkZXJpbmcsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldFBvcnRzT3JkZXJpbmcpO1xuXHRcdFxuXHRcdC8vZXhwZXJpbWVudGFsIGRhdGEgb3ZhcmxheVxuXHRcdHVyLmFjdGlvbihcInJlbW92ZUFsbFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVBbGwsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlc3RvcmVBbGwpO1xuXHRcdHVyLmFjdGlvbihcImhpZGVFeHBlcmltZW50XCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmhpZGVFeHAsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuaGlkZUV4cCk7XG5cdFx0dXIuYWN0aW9uKFwidW5oaWRlRXhwZXJpbWVudFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmhpZGVFeHAsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmhpZGVFeHApO1xuXHRcdHVyLmFjdGlvbihcImhpZGVGaWxlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmhpZGVGaWxlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlRmlsZVVuZG8pO1xuXHRcdHVyLmFjdGlvbihcInVuaGlkZUZpbGVcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5oaWRlRmlsZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5oaWRlRmlsZVVuZG8pO1xuXHRcdHVyLmFjdGlvbihcInJlbW92ZUV4cGVyaW1lbnRcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVtb3ZlRXhwLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hZGRFeHApO1xuXHRcdHVyLmFjdGlvbihcInJlbW92ZUZpbGVcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVtb3ZlRmlsZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkRmlsZSk7XG5cdFx0dXIuYWN0aW9uKFwiZXhwQnV0dG9uQ2hhbmdlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmV4cEJ1dHRvbkNoYW5nZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZXhwQnV0dG9uQ2hhbmdlKTtcblx0XHR1ci5hY3Rpb24oXCJmaWxlQnV0dG9uQ2hhbmdlSGlkZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5maWxlQnV0dG9uQ2hhbmdlSGlkZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZmlsZUJ1dHRvbkNoYW5nZVVuSGlkZSk7XG5cdFx0dXIuYWN0aW9uKFwiZmlsZUJ1dHRvbkNoYW5nZVVuSGlkZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5maWxlQnV0dG9uQ2hhbmdlVW5IaWRlLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5maWxlQnV0dG9uQ2hhbmdlSGlkZSk7XG5cblx0XHQvL3VyLmFjdGlvbihcImV4cEJ1dHRvblVuaGlkZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5jaGFuZ2VFeHBCdXR0b24yLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5leHBCdXR0b25IaWRlKTtcblx0XHQvL3VyLmFjdGlvbihcInBhcnNlRGF0YVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5wYXJzZURhdGEsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZUZpbGUpO1xuXHQgIH1cblxuXHRcdGZ1bmN0aW9uIHNob3dUb29sdGlwKGV2ZW50KSB7XG5cdFx0XHR2YXIgbm9kZSA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5jeVRhcmdldDtcblxuXG5cdFx0XHR2YXIgY2FuSGF2ZVRvb2x0aXAgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZOb2RlKG5vZGUpIHx8IG5vZGUuZGF0YShcInRvb2x0aXBcIikgIT09bnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFjYW5IYXZlVG9vbHRpcChub2RlKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciByZWY7IC8vIHVzZWQgb25seSBmb3IgcG9zaXRpb25pbmdcblx0XHRcdHZhciBwb3MgPSBldmVudC5wb3NpdGlvbiB8fCBldmVudC5jeVBvc2l0aW9uO1xuXHRcdFx0dmFyIHBhbiA9IGN5LnBhbigpO1xuXHRcdFx0dmFyIHpvb20gPSBjeS56b29tKCk7XG5cblx0XHRcdHZhciBpbmZvYm94ID0gY2xhc3Nlcy5BdXhpbGlhcnlVbml0LmNoZWNrUG9pbnQocG9zLngsIHBvcy55LCBub2RlLCAwKTtcblx0XHRcdHZhciB0b29sdGlwQ29udGVudDtcblxuXHRcdFx0XG5cdFx0XHRcdGlmICghaW5mb2JveCkge1xuXHRcdFx0XHRcdHRvb2x0aXBDb250ZW50ID0gbm9kZS5kYXRhKCd0b29sdGlwJyk7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmICggdG9vbHRpcENvbnRlbnQgPT0gdW5kZWZpbmVkICB8fCB0b29sdGlwQ29udGVudCA9PSAnJykge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlZiA9IG5vZGUucG9wcGVyUmVmKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0dG9vbHRpcENvbnRlbnQgPSBpbmZvYm94Wyd0b29sdGlwJ107XG5cblx0XHRcdFx0XHRpZiAoIHRvb2x0aXBDb250ZW50ID09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgbW9kZWxQb3MgPSBjbGFzc2VzLkF1eGlsaWFyeVVuaXQuZ2V0QWJzb2x1dGVDb29yZChpbmZvYm94LCBjeSk7XG5cdFx0XHRcdFx0dmFyIG1vZGVsVyA9IGluZm9ib3guYmJveC53O1xuXHRcdFx0XHRcdHZhciBtb2RlbEggPSBpbmZvYm94LmJib3guaDtcblx0XHRcdFx0XHR2YXIgcmVuZGVyZWRXID0gbW9kZWxXICogem9vbTtcblx0XHRcdFx0XHR2YXIgcmVuZGVyZWRIID0gbW9kZWxIICogem9vbTtcblx0XHRcdFx0XHRtb2RlbFBvcy54IC09IG1vZGVsVyAvIDI7XG5cdFx0XHRcdFx0bW9kZWxQb3MueSAtPSBtb2RlbEggLyAyO1xuXHRcdFx0XHRcdHZhciByZW5kZXJlZFBvcyA9IGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvUmVuZGVyZWRQb3NpdGlvbihtb2RlbFBvcywgcGFuLCB6b29tKTtcblxuXHRcdFx0XHRcdHZhciByZW5kZXJlZERpbXMgPSB7IHc6IHJlbmRlcmVkVywgaDogcmVuZGVyZWRIIH07XG5cblx0XHRcdFx0XHRyZWYgPSBub2RlLnBvcHBlclJlZih7XG5cdFx0XHRcdFx0XHRyZW5kZXJlZFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlbmRlcmVkUG9zO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHJlbmRlcmVkRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZW5kZXJlZERpbXM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFxuXG5cdFx0XHR2YXIgcGxhY2VtZW50ID0gaW5mb2JveCA/IGluZm9ib3guYW5jaG9yU2lkZSA6ICdib3R0b20nO1xuXHRcdFx0dmFyIGRlc3Ryb3lUaXBweTtcblxuXHRcdFx0dmFyIHRpcHB5ID0gVGlwcHkub25lKHJlZiwge1xuXHRcdFx0XHRjb250ZW50OiAoKCkgPT4ge1xuXHRcdFx0XHRcdHZhciBjb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cblx0XHRcdFx0XHRjb250ZW50LnN0eWxlWydmb250LXNpemUnXSA9IDEyICogem9vbSArICdweCc7XG5cdFx0XHRcdFx0Y29udGVudC5pbm5lckhUTUwgPSB0b29sdGlwQ29udGVudDtcblxuXHRcdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0XHR9KSgpLFxuXHRcdFx0XHR0cmlnZ2VyOiAnbWFudWFsJyxcblx0XHRcdFx0aGlkZU9uQ2xpY2s6IHRydWUsXG5cdFx0XHRcdGFycm93OiB0cnVlLFxuXHRcdFx0XHRwbGFjZW1lbnQsXG5cdFx0XHRcdG9uSGlkZGVuOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRjeS5vZmYoJ3BhbiB6b29tJywgZGVzdHJveVRpcHB5KTtcblx0XHRcdFx0XHRub2RlLm9mZigncG9zaXRpb24nLCBkZXN0cm95VGlwcHkpO1xuXHRcdFx0XHRcdGN5Lm9mZigndGFwZHJhZycsIGRlc3Ryb3lUaXBweSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRkZXN0cm95VGlwcHkgPSBmdW5jdGlvbigpe1xuXHRcdFx0XHR0aXBweS5kZXN0cm95KCk7XG5cdFx0XHR9O1xuXG5cdFx0XHRjeS5vbigncGFuIHpvb20nLCBkZXN0cm95VGlwcHkpO1xuXHRcdFx0bm9kZS5vbigncG9zaXRpb24nLCBkZXN0cm95VGlwcHkpO1xuXHRcdFx0Y3kub24oJ3RhcGRyYWcnLCBkZXN0cm95VGlwcHkpO1xuXG5cdFx0XHRzZXRUaW1lb3V0KCAoKSA9PiB0aXBweS5zaG93KCksMjUwICk7XG5cdFx0fVxuXG5cdCAgZnVuY3Rpb24gYmluZEN5RXZlbnRzKCkge1xuXG5cdFx0XHRjeS5vbigndGFwZHJhZ292ZXInLCAnbm9kZScsIGZ1bmN0aW9uKGV2ZW50KSB7XG5cdFx0XHRcdHZhciB3YWl0RHVyYXRpb24gPSAyMDA7XG5cdFx0XHRcdHZhciBub2RlVGFwZHJhZ291dDtcblx0XHRcdFx0dmFyIGN1cnJFdmVudCA9IGV2ZW50O1xuXHRcdFx0XHR2YXIgbm9kZSA9IGN1cnJFdmVudC50YXJnZXQgfHwgY3VyckV2ZW50LmN5VGFyZ2V0O1xuXHRcdFx0XHR2YXIgaW5RdWV1ZSA9IHRydWU7XG5cblx0XHRcdFx0dmFyIGNsZWFyTm9kZUV2ZW50ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCBub2RlVGFwZHJhZ291dCApIHtcblx0XHRcdFx0XHRcdG5vZGUub2ZmKCd0YXBkcmFnb3V0Jywgbm9kZVRhcGRyYWdvdXQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICggbm9kZVRhcGRyYWcgKSB7XG5cdFx0XHRcdFx0XHRub2RlLm9mZigndGFwZHJhZycsIG5vZGVUYXBkcmFnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dmFyIGdldFNob3dUb29sdGlwQXN5Y24gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzaG93VG9vbHRpcCggY3VyckV2ZW50ICk7XG5cdFx0XHRcdFx0XHRpblF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0fSwgd2FpdER1cmF0aW9uICk7XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dmFyIHNob3dUb29sdGlwQXN5Y24gPSBnZXRTaG93VG9vbHRpcEFzeWNuKCk7XG5cblx0XHRcdFx0bm9kZS5vbigndGFwZHJhZ291dCcsIG5vZGVUYXBkcmFnb3V0ID0gZnVuY3Rpb24oZSkge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCggc2hvd1Rvb2x0aXBBc3ljbiApO1xuXHRcdFx0XHRcdGNsZWFyTm9kZUV2ZW50KCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdG5vZGUub24oJ3RhcGRyYWcnLCBub2RlVGFwZHJhZyA9IGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRjdXJyRXZlbnQgPSBlO1xuXHRcdFx0XHRcdGlmICghaW5RdWV1ZSkge1xuXHRcdFx0XHRcdFx0c2hvd1Rvb2x0aXBBc3ljbiA9IGdldFNob3dUb29sdGlwQXN5Y24oKTtcblx0XHRcdFx0XHRcdGluUXVldWUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHQgICAgY3kub24oJ3RhcGVuZCcsICdub2RlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG5cdCAgICB9KTtcblxuXHQgICAgY3kub24oXCJleHBhbmRjb2xsYXBzZS5iZWZvcmVjb2xsYXBzZVwiLCBcIm5vZGVcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgIHZhciBub2RlID0gdGhpcztcblx0ICAgICAgLy9UaGUgY2hpbGRyZW4gaW5mbyBvZiBjb21wbGV4IG5vZGVzIHNob3VsZCBiZSBzaG93biB3aGVuIHRoZXkgYXJlIGNvbGxhcHNlZFxuXHQgICAgICBpZiAobm9kZS5fcHJpdmF0ZS5kYXRhLmNsYXNzLnN0YXJ0c1dpdGgoXCJjb21wbGV4XCIpKSB7XG5cdCAgICAgICAgLy9UaGUgbm9kZSBpcyBiZWluZyBjb2xsYXBzZWQgc3RvcmUgaW5mb2xhYmVsIHRvIHVzZSBpdCBsYXRlclxuXHQgICAgICAgIHZhciBpbmZvTGFiZWwgPSBlbGVtZW50VXRpbGl0aWVzLmdldEluZm9MYWJlbChub2RlKTtcblx0ICAgICAgICBub2RlLl9wcml2YXRlLmRhdGEuaW5mb0xhYmVsID0gaW5mb0xhYmVsO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgY3kub24oXCJleHBhbmRjb2xsYXBzZS5hZnRlcmNvbGxhcHNlXCIsIFwibm9kZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgdmFyIG5vZGUgPSB0aGlzO1xuXHQgICAgICAvLyBUaGUgd2lkdGggYW5kIGhlaWdodCBvZiBqdXN0IGNvbGxhcHNlZCBub2RlcyBzaG91bGQgYmUgMzYsIGJ1dCB0aGV5IGFyZSBzdXBwb3NlZCB0byBiZSByZXNpemFibGUuIFRoZXJlZm9yZSwgd2Vcblx0ICAgICAgLy8gc2V0IHRoZWlyIGRhdGEoJ2Jib3gnKSBhY2NvcmRpbmdseS4gV2UgZG8gbm90IHN0b3JlIHRoZWlyIGV4aXN0aW5nIGJib3gudyBhbmQgYmJveC5oIGJlY2F1c2UgdGhleSBoYXZlIG5vIHNpZ25pZmljYW5jZSBmb3IgY29tcG91bmRzIChmb3Igbm93KS5cblx0ICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuXHQgICAgICB2YXIgYmJveCA9IG5vZGUuZGF0YSgnYmJveCcpO1xuXHQgICAgICBiYm94LncgPSAzNjtcblx0ICAgICAgYmJveC5oID0gMzY7XG5cdCAgICAgIG5vZGUuZGF0YSgnYmJveCcsIGJib3gpO1xuXHQgICAgICBjeS5lbmRCYXRjaCgpO1xuXHQgICAgfSk7XG5cblx0ICAgIGN5Lm9uKFwiZXhwYW5kY29sbGFwc2UuYmVmb3JlZXhwYW5kXCIsIFwibm9kZVwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcblx0ICAgICAgdmFyIG5vZGUgPSB0aGlzO1xuXHQgICAgICBub2RlLnJlbW92ZURhdGEoXCJpbmZvTGFiZWxcIik7XG5cdCAgICB9KTtcblxuXHQgICAgY3kub24oXCJleHBhbmRjb2xsYXBzZS5hZnRlcmV4cGFuZFwiLCBcIm5vZGVcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgIHZhciBub2RlID0gdGhpcztcblx0ICAgICAgY3kubm9kZXMoKS51cGRhdGVDb21wb3VuZEJvdW5kcygpO1xuICAgICAgICBcbiAgICAgICAgaWYoIW9wdGlvbnMucmVjYWxjdWxhdGVPbkNvbXBsZXhpdHlNYW5hZ2VtZW50KXtcbiAgICAgICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICAgICAgICB9XG5cdCAgICAgIC8vRG9uJ3Qgc2hvdyBjaGlsZHJlbiBpbmZvIHdoZW4gdGhlIGNvbXBsZXggbm9kZSBpcyBleHBhbmRlZFxuXHQgICAgICBpZiAobm9kZS5fcHJpdmF0ZS5kYXRhLmNsYXNzLnN0YXJ0c1dpdGgoXCJjb21wbGV4XCIpKSB7XG5cdCAgICAgICAgbm9kZS5yZW1vdmVTdHlsZSgnY29udGVudCcpO1xuXHQgICAgICB9XG5cdCAgICB9KTtcbiAgICAgIFxuICAgICAgY3kub24oXCJiZWZvcmVEb1wiLCBmdW5jdGlvbiAoZSwgbmFtZSwgYXJncykge1xuICAgICAgICBpZihuYW1lID09IFwibGF5b3V0XCIgfHwgbmFtZSA9PSBcImNvbGxhcHNlXCIgfHwgbmFtZSA9PSBcImV4cGFuZFwiIHx8IG5hbWUgPT0gXCJjb2xsYXBzZVJlY3Vyc2l2ZWx5XCIgfHwgbmFtZSA9PSBcImV4cGFuZFJlY3Vyc2l2ZWx5XCIgXG4gICAgICAgICAgfHwgKG5hbWUgPT0gXCJiYXRjaFwiICYmIChhcmdzWzBdWyduYW1lJ10gPT0gXCJ0aGluQm9yZGVyXCIgfHwgYXJnc1swXVsnbmFtZSddID09IFwidGhpY2tlbkJvcmRlclwiKSkpe1xuICAgICAgICAgIHZhciBwYXJlbnRzID0gY3kuZWxlbWVudHMoXCI6cGFyZW50XCIpLmpzb25zKCk7IC8vIHBhcmVudCBub2Rlc1xuICAgICAgICAgIHZhciBzaW1wbGVzID0gY3kuZWxlbWVudHMoKS5ub3QoXCI6cGFyZW50XCIpLmpzb25zKCk7IC8vIHNpbXBsZSBub2RlcyBhbmQgZWRnZXNcbiAgICAgICAgICB2YXIgYWxsRWxlbWVudHMgPSBwYXJlbnRzLmNvbmNhdChzaW1wbGVzKTsgIC8vIGFsbCBlbGVtZW50c1xuICAgICAgICAgIGFyZ3MuYWxsRWxlbWVudHMgPSBhbGxFbGVtZW50cztcbiAgICAgICAgICB2YXIgcG9ydHMgPSB7fTtcbiAgICAgICAgICBjeS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgICAgICBpZihlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVQb3J0cyhub2RlKSl7XG4gICAgICAgICAgICAgIHBvcnRzW25vZGUuaWQoKV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vZGUuZGF0YShcInBvcnRzXCIpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXJncy5wb3J0cyA9IHBvcnRzO1xuICAgICAgICAgIGFyZ3Mudmlld3BvcnQgPSB7cGFuOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN5LnBhbigpKSksIHpvb206IGN5Lnpvb20oKX07XG4gICAgICAgICAgaWYobmFtZSA9PSBcImxheW91dFwiKVxuICAgICAgICAgICAgbWFpblV0aWxpdGllcy5iZWZvcmVQZXJmb3JtTGF5b3V0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjeS5vbihcImJlZm9yZVJlZG9cIiwgZnVuY3Rpb24gKGUsIG5hbWUsIGFyZ3MpIHtcbiAgICAgICAgaWYobmFtZSA9PSBcImxheW91dFwiIHx8IG5hbWUgPT0gXCJjb2xsYXBzZVwiIHx8IG5hbWUgPT0gXCJleHBhbmRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VSZWN1cnNpdmVseVwiIHx8IG5hbWUgPT0gXCJleHBhbmRSZWN1cnNpdmVseVwiIFxuICAgICAgICAgIHx8IChuYW1lID09IFwiYmF0Y2hcIiAmJiAoYXJnc1swXVsnbmFtZSddID09IFwidGhpbkJvcmRlclwiIHx8IGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaWNrZW5Cb3JkZXJcIikpKXtcbiAgICAgICAgICB2YXIgcGFyZW50cyA9IGN5LmVsZW1lbnRzKFwiOnBhcmVudFwiKS5qc29ucygpOyAvLyBwYXJlbnQgbm9kZXNcbiAgICAgICAgICB2YXIgc2ltcGxlcyA9IGN5LmVsZW1lbnRzKCkubm90KFwiOnBhcmVudFwiKS5qc29ucygpOyAvLyBzaW1wbGUgbm9kZXMgYW5kIGVkZ2VzXG4gICAgICAgICAgdmFyIGFsbEVsZW1lbnRzID0gcGFyZW50cy5jb25jYXQoc2ltcGxlcyk7ICAvLyBhbGwgZWxlbWVudHNcbiAgICAgICAgICBhcmdzLmFsbEVsZW1lbnRzMiA9IGFsbEVsZW1lbnRzO1xuICAgICAgICAgIHZhciBwb3J0cyA9IHt9O1xuICAgICAgICAgIGN5Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgICAgIGlmKGVsZW1lbnRVdGlsaXRpZXMuY2FuSGF2ZVBvcnRzKG5vZGUpKXtcbiAgICAgICAgICAgICAgcG9ydHNbbm9kZS5pZCgpXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkobm9kZS5kYXRhKFwicG9ydHNcIikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhcmdzLnBvcnRzMiA9IHBvcnRzO1xuICAgICAgICAgIGFyZ3Mudmlld3BvcnQyID0ge3BhbjogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjeS5wYW4oKSkpLCB6b29tOiBjeS56b29tKCl9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY3kub24oXCJhZnRlckRvXCIsIGZ1bmN0aW9uIChlLCBuYW1lLCBhcmdzLCByZXMpIHtcbiAgICAgICAgaWYobmFtZSA9PSBcImxheW91dFwiIHx8IG5hbWUgPT0gXCJjb2xsYXBzZVwiIHx8IG5hbWUgPT0gXCJleHBhbmRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VSZWN1cnNpdmVseVwiIHx8IG5hbWUgPT0gXCJleHBhbmRSZWN1cnNpdmVseVwiIFxuICAgICAgICAgIHx8IChuYW1lID09IFwiYmF0Y2hcIiAmJiAoYXJnc1swXVsnbmFtZSddID09IFwidGhpbkJvcmRlclwiIHx8IGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaWNrZW5Cb3JkZXJcIikpKXtcbiAgICAgICAgICByZXMuYWxsRWxlbWVudHMgPSBhcmdzLmFsbEVsZW1lbnRzO1xuICAgICAgICAgIHJlcy5wb3J0cyA9IGFyZ3MucG9ydHM7XG4gICAgICAgICAgcmVzLnZpZXdwb3J0ID0gYXJncy52aWV3cG9ydDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGN5Lm9uKFwiYWZ0ZXJSZWRvXCIsIGZ1bmN0aW9uIChlLCBuYW1lLCBhcmdzLCByZXMpIHtcbiAgICAgICAgaWYobmFtZSA9PSBcImxheW91dFwiIHx8IG5hbWUgPT0gXCJjb2xsYXBzZVwiIHx8IG5hbWUgPT0gXCJleHBhbmRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VSZWN1cnNpdmVseVwiIHx8IG5hbWUgPT0gXCJleHBhbmRSZWN1cnNpdmVseVwiIFxuICAgICAgICAgIHx8IChuYW1lID09IFwiYmF0Y2hcIiAmJiAoYXJnc1swXVsnbmFtZSddID09IFwidGhpbkJvcmRlclwiIHx8IGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaWNrZW5Cb3JkZXJcIikpKXtcbiAgICAgICAgICByZXMuYWxsRWxlbWVudHMgPSBhcmdzLmFsbEVsZW1lbnRzMjtcbiAgICAgICAgICByZXMucG9ydHMgPSBhcmdzLnBvcnRzMjtcbiAgICAgICAgICByZXMudmlld3BvcnQgPSBhcmdzLnZpZXdwb3J0MjtcbiAgICAgICAgICBjeS5qc29uKHtmbGF0RWxlczogdHJ1ZSwgZWxlbWVudHM6IGFyZ3MuYWxsRWxlbWVudHN9KTtcbiAgICAgICAgICBjeS5iYXRjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgY3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe1xuICAgICAgICAgICAgICBpZihlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVQb3J0cyhub2RlKSl7XG4gICAgICAgICAgICAgICAgbm9kZS5kYXRhKFwicG9ydHNcIiwgYXJncy5wb3J0c1tub2RlLmlkKCldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3kucGFuKGFyZ3Mudmlld3BvcnRbXCJwYW5cIl0pO1xuICAgICAgICAgIGN5Lnpvb20oYXJncy52aWV3cG9ydFtcInpvb21cIl0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY3kub24oXCJiZWZvcmVVbmRvXCIsIGZ1bmN0aW9uIChlLCBuYW1lLCBhcmdzKSB7XG4gICAgICAgIGlmKG5hbWUgPT0gXCJsYXlvdXRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VcIiB8fCBuYW1lID09IFwiZXhwYW5kXCIgfHwgbmFtZSA9PSBcImNvbGxhcHNlUmVjdXJzaXZlbHlcIiB8fCBuYW1lID09IFwiZXhwYW5kUmVjdXJzaXZlbHlcIiBcbiAgICAgICAgICB8fCAobmFtZSA9PSBcImJhdGNoXCIgJiYgKGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaW5Cb3JkZXJcIiB8fCBhcmdzWzBdWyduYW1lJ10gPT0gXCJ0aGlja2VuQm9yZGVyXCIpKSl7XG4gICAgICAgICAgdmFyIHBhcmVudHMgPSBjeS5lbGVtZW50cyhcIjpwYXJlbnRcIikuanNvbnMoKTsgLy8gcGFyZW50IG5vZGVzXG4gICAgICAgICAgdmFyIHNpbXBsZXMgPSBjeS5lbGVtZW50cygpLm5vdChcIjpwYXJlbnRcIikuanNvbnMoKTsgLy8gc2ltcGxlIG5vZGVzIGFuZCBlZGdlc1xuICAgICAgICAgIHZhciBhbGxFbGVtZW50cyA9IHBhcmVudHMuY29uY2F0KHNpbXBsZXMpOyAgLy8gYWxsIGVsZW1lbnRzXG4gICAgICAgICAgYXJncy5hbGxFbGVtZW50czIgPSBhbGxFbGVtZW50cztcbiAgICAgICAgICB2YXIgcG9ydHMgPSB7fTtcbiAgICAgICAgICBjeS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgICAgICBpZihlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVQb3J0cyhub2RlKSl7XG4gICAgICAgICAgICAgIHBvcnRzW25vZGUuaWQoKV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vZGUuZGF0YShcInBvcnRzXCIpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXJncy5wb3J0czIgPSBwb3J0cztcbiAgICAgICAgICBhcmdzLnZpZXdwb3J0MiA9IHtwYW46IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3kucGFuKCkpKSwgem9vbTogY3kuem9vbSgpfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGN5Lm9uKFwiYWZ0ZXJVbmRvXCIsIGZ1bmN0aW9uIChlLCBuYW1lLCBhcmdzLCByZXMpIHtcbiAgICAgICAgaWYobmFtZSA9PSBcImxheW91dFwiIHx8IG5hbWUgPT0gXCJjb2xsYXBzZVwiIHx8IG5hbWUgPT0gXCJleHBhbmRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VSZWN1cnNpdmVseVwiIHx8IG5hbWUgPT0gXCJleHBhbmRSZWN1cnNpdmVseVwiIFxuICAgICAgICAgIHx8IChuYW1lID09IFwiYmF0Y2hcIiAmJiAoYXJnc1swXVsnbmFtZSddID09IFwidGhpbkJvcmRlclwiIHx8IGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaWNrZW5Cb3JkZXJcIikpKXtcbiAgICAgICAgICByZXMuYWxsRWxlbWVudHMgPSBhcmdzLmFsbEVsZW1lbnRzMjtcbiAgICAgICAgICByZXMucG9ydHMgPSBhcmdzLnBvcnRzMjtcbiAgICAgICAgICByZXMudmlld3BvcnQgPSBhcmdzLnZpZXdwb3J0MjtcbiAgICAgICAgICBjeS5qc29uKHtmbGF0RWxlczogdHJ1ZSwgZWxlbWVudHM6IGFyZ3MuYWxsRWxlbWVudHN9KTtcbiAgICAgICAgICBjeS5iYXRjaChmdW5jdGlvbigpe1xuICAgICAgICAgICAgY3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe1xuICAgICAgICAgICAgICBpZihlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVQb3J0cyhub2RlKSl7XG4gICAgICAgICAgICAgICAgbm9kZS5kYXRhKFwicG9ydHNcIiwgYXJncy5wb3J0c1tub2RlLmlkKCldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3kucGFuKGFyZ3Mudmlld3BvcnRbXCJwYW5cIl0pO1xuICAgICAgICAgIGN5Lnpvb20oYXJncy52aWV3cG9ydFtcInpvb21cIl0pOyAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfSk7XG5cblx0ICAgIGN5Lm9uKCdsYXlvdXRzdG9wJywgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdC8qXG5cdFx0XHRcdCogJ3ByZXNldCcgbGF5b3V0IGlzIGNhbGxlZCB0byBnaXZlIHRoZSBpbml0aWFsIHBvc2l0aW9ucyBvZiBub2RlcyBieSBzYmdudml6LlxuXHRcdFx0XHQqIFNlZW1zIGxpa2UgJ2dyaWQnIGxheW91dCBpcyBjYWxsZWQgYnkgQ3l0b3NjYXBlLmpzIGNvcmUgaW4gbG9hZGluZyBncmFwaHMuXG5cdFx0XHRcdCogSWYgdGhlIGxheW91dCBpcyBub3Qgb25lIG9mIHRoZXNlIChub3JtYWxseSBpdCBpcyBzdXBwb3NlZCB0byBiZSAnY29zZS1iaWxrZW50Jylcblx0XHRcdFx0KiBhbmQgcG9ydHMgYXJlIGVuYWJsZWQgY2FsbCAnZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VQb3J0c09yaWVudGF0aW9uQWZ0ZXJMYXlvdXQoKSdcblx0XHRcdFx0Ki9cblx0ICAgICAgaWYgKGV2ZW50LmxheW91dC5vcHRpb25zLm5hbWUgIT09ICdwcmVzZXQnICYmIGV2ZW50LmxheW91dC5vcHRpb25zLm5hbWUgIT09ICdncmlkJylcblx0ICAgICAge1xuXHQgICAgICAgIGlmIChncmFwaFV0aWxpdGllcy5wb3J0c0VuYWJsZWQgPT09IHRydWUpXG5cdCAgICAgICAge1xuXHQgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VQb3J0c09yaWVudGF0aW9uQWZ0ZXJMYXlvdXQoKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAkKGRvY3VtZW50KS5vbigndXBkYXRlR3JhcGhFbmQnLCBmdW5jdGlvbihldmVudCwgX2N5LCBpc0xheW91dFJlcXVpcmVkLGNhbGxiYWNrKSB7XG5cblx0XHRcdFx0Ly8gaWYgdGhlIGV2ZW50IGlzIG5vdCB0cmlnZ2VyZWQgZm9yIHRoaXMgY3kgaW5zdGFuY2UgcmV0dXJuIGRpcmVjdGx5XG5cdFx0XHRcdGlmICggX2N5ICE9IGN5ICkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgc2V0Q29tcG91bmRJbmZvYm94ZXMgPSBmdW5jdGlvbihub2RlLCBpc0xheW91dFJlcXVpcmVkLGN5SW5zdGFuY2Upe1xuXHRcdFx0XHRcdGlmKGN5SW5zdGFuY2UgPT0gdW5kZWZpbmVkICkgcmV0dXJuO1xuXHRcdFx0XHRcdGlmKG5vZGUuZGF0YSgpLmluZm9ib3hDYWxjdWxhdGVkKXtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9ZWxzZSBpZihub2RlLmlzUGFyZW50KCkpe1xuXHRcdFx0XHRcdFx0bm9kZS5jaGlsZHJlbigpLmZvckVhY2goZnVuY3Rpb24oY2hpbGROb2RlKXtcblx0XHRcdFx0XHRcdFx0c2V0Q29tcG91bmRJbmZvYm94ZXMoY2hpbGROb2RlLGlzTGF5b3V0UmVxdWlyZWQsY3lJbnN0YW5jZSk7XG5cdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdG5vZGUuZGF0YShcImluZm9ib3hDYWxjdWxhdGVkXCIsIHRydWUpO1xuXHRcdFx0XHRcdG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnLCB7fSk7XG5cdFx0XHRcdFx0Ly8gZm9yIGVhY2ggc3RhdGVzYW5kaW5mb3Ncblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgY29ycmVjdEluZm9Cb3hDb29yZCA9IHRydWU7XG5cdFx0XHRcdFx0Zm9yKHZhciBpPTA7IGkgPCBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdHZhciBzdGF0ZXNhbmRpbmZvcyA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKVtpXTtcblx0XHRcdFx0XHRcdHZhciBiYm94ID0gc3RhdGVzYW5kaW5mb3MuYmJveDtcblx0XHRcdFx0XHRcdHZhciBpbmZvQm94T25Ob2RlID0gY2xhc3Nlcy5BdXhpbGlhcnlVbml0LnNldEFuY2hvclNpZGUoc3RhdGVzYW5kaW5mb3MsIG5vZGUpO1xuXHRcdFx0XHRcdFx0Y29ycmVjdEluZm9Cb3hDb29yZCA9IGNvcnJlY3RJbmZvQm94Q29vcmQgJiYgaW5mb0JveE9uTm9kZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIHN0YXRlc1RvQWRkID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciBpPTA7IGkgPCBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgc3RhdGVzYW5kaW5mb3MgPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJylbaV07XG5cdFx0XHRcdFx0XHR2YXIgYmJveCA9IHN0YXRlc2FuZGluZm9zLmJib3g7XG5cdFx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdFx0aWYgKChpc0xheW91dFJlcXVpcmVkID09PSB1bmRlZmluZWQgfHwgIWlzTGF5b3V0UmVxdWlyZWQgKSAmJiBjb3JyZWN0SW5mb0JveENvb3JkKSB7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRjbGFzc2VzLkF1eGlsaWFyeVVuaXQuc2V0QW5jaG9yU2lkZShzdGF0ZXNhbmRpbmZvcywgbm9kZSk7XG5cdFx0XHRcdFx0XHRcdC8vdmFyIGZpbGVMb2FkUGFyYW0gPSB7ZXh0cmFQYWRkaW5nOiAgTnVtYmVyKG5vZGUuZGF0YSgpLm9yaWdpbmFsUGFkZGluZyl9O1xuXHRcdFx0XHRcdFx0XHR2YXIgY29yZFJlc3VsdCA9IGNsYXNzZXMuQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9SZWxhdGl2ZUNvb3JkKHN0YXRlc2FuZGluZm9zLCBiYm94LngrYmJveC53LzIsIGJib3gueStiYm94LmgvMiwgY3lJbnN0YW5jZSwgbm9kZSlcblx0XHRcdFx0XHRcdFx0c3RhdGVzYW5kaW5mb3MuYmJveC54ID0gY29yZFJlc3VsdC54O1xuXHRcdFx0XHRcdFx0XHRzdGF0ZXNhbmRpbmZvcy5iYm94LnkgPSBjb3JkUmVzdWx0Lnk7XHRcblx0XHRcdFx0XHRcdFx0c3RhdGVzYW5kaW5mb3MuaXNEaXNwbGF5ZWQgPSB0cnVlO1x0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGxvY2F0aW9uID0gc3RhdGVzYW5kaW5mb3MuYW5jaG9yU2lkZTsgLy8gdG9wIGJvdHRvbSByaWdodCBsZWZ0XG5cdFx0XHRcdFx0XHRcdHZhciBsYXlvdXRzID0gbm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpO1xuXHRcdFx0XHRcdFx0XHRpZighbGF5b3V0c1tsb2NhdGlvbl0pIHsgLy8gbGF5b3V0IGRvZXNuJ3QgZXhpc3QgeWV0IGZvciB0aGlzIGxvY2F0aW9uXG5cdFx0XHRcdFx0XHRcdFx0bGF5b3V0c1tsb2NhdGlvbl0gPSBjbGFzc2VzLkF1eFVuaXRMYXlvdXQuY29uc3RydWN0KG5vZGUsIGxvY2F0aW9uKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyBwb3B1bGF0ZSB0aGUgbGF5b3V0IG9mIHRoaXMgc2lkZVxuXHRcdFx0XHRcdFx0XHRjbGFzc2VzLkF1eFVuaXRMYXlvdXQuYWRkQXV4VW5pdChsYXlvdXRzW2xvY2F0aW9uXSwgY3lJbnN0YW5jZSwgc3RhdGVzYW5kaW5mb3MsIHVuZGVmaW5lZCwgdHJ1ZSk7IC8vcG9zaXRpb25zIGFyZSBwcmVjb21wdXRlZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmKCFub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykpIHsgLy8gZW5zdXJlIG1pbmltYWwgaW5pdGlhbGl6YXRpb25cblx0XHRcdFx0XHRcdFx0XHRub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJywge30pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZhciBsb2NhdGlvbiA9IGNsYXNzZXMuQXV4VW5pdExheW91dC5zZWxlY3ROZXh0QXZhaWxhYmxlKG5vZGUsIGN5KTtcblx0XHRcdFx0XHRcdFx0aWYoIW5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl0pIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbG9jYXRpb25dID0gY2xhc3Nlcy5BdXhVbml0TGF5b3V0LmNvbnN0cnVjdChub2RlLCBsb2NhdGlvbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmFyIGxheW91dCA9IG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl07XG5cdFx0XHRcdFx0XHRcdHN0YXRlc2FuZGluZm9zLmFuY2hvclNpZGUgPSBsb2NhdGlvbjtcblx0XHRcdFx0XHRcdFx0c3dpdGNoKGxvY2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInRvcFwiOiBzdGF0ZXNhbmRpbmZvcy5iYm94LnkgPSAwOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiYm90dG9tXCI6IHN0YXRlc2FuZGluZm9zLmJib3gueSA9IDEwMDsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImxlZnRcIjogc3RhdGVzYW5kaW5mb3MuYmJveC54ID0gMDsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6IHN0YXRlc2FuZGluZm9zLmJib3gueCA9IDEwMDsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcy5BdXhVbml0TGF5b3V0LmFkZEF1eFVuaXQobGF5b3V0LCBjeUluc3RhbmNlLCBzdGF0ZXNhbmRpbmZvcyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYgKGlzTGF5b3V0UmVxdWlyZWQgPT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbG9jYXRpb25zID0gY2xhc3Nlcy5BdXhVbml0TGF5b3V0LmNoZWNrRml0KG5vZGUsIGN5KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAobG9jYXRpb25zICE9PSB1bmRlZmluZWQgJiYgbG9jYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzZXMuQXV4VW5pdExheW91dC5maXRVbml0cyhub2RlLCBjeSwgbG9jYXRpb25zKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0fTtcblx0ICAgICAgLy8gbGlzdCBhbGwgZW50aXR5dHlwZXMgYW5kc3RvcmUgdGhlbSBpbiB0aGUgZ2xvYmFsIHNjcmF0Y2hcblx0ICAgICAgLy8gb25seSBzdGF0ZWZ1bCBFUE4gKGNvbXBsZXgsIG1hY3JvbW9sZWN1bGUgb3IgbnVjbGVpYyBhY2lkKSBhcmUgY29uY2VybmVkXG5cblx0ICAgICAgLy8gZm9sbG93aW5nIGlzIHVuYXBwbGllZCBkdWUgdG8gcGVyZm9ybWFuY2UgZGVjcmVhc2luZywgYWRkaW5nIHNvbWV0aGluZyBsaWtlIDIwJSB0aW1lIG9uIGxvYWRcblx0ICAgICAgLypjeS5zdGFydEJhdGNoKCk7XG5cdCAgICAgIHZhciBlbnRpdHlIYXNoID0ge307XG5cdCAgICAgIGN5Lm5vZGVzKFwiW2NsYXNzPSdjb21wbGV4J10sIFtjbGFzcz0nbWFjcm9tb2xlY3VsZSddLCBbY2xhc3M9J251Y2xlaWMgYWNpZCBmZWF0dXJlJ11cIikuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7XG5cdCAgICAgICAgLy8gaWRlbnRpZnkgYW4gZW50aXR5IGJ5IGl0cyBsYWJlbCBBTkQgY2xhc3Ncblx0ICAgICAgICB2YXIgbGFiZWwgPSBub2RlLmRhdGEoJ2xhYmVsJyk7XG5cdCAgICAgICAgdmFyIF9jbGFzcyA9IG5vZGUuZGF0YSgnY2xhc3MnKTtcblx0ICAgICAgICB2YXIgaWQ9bGFiZWwrJy0nK19jbGFzcztcblx0ICAgICAgICBpZighZW50aXR5SGFzaC5oYXNPd25Qcm9wZXJ0eShpZCkpIHsgLy8gY3JlYXRlIGVudGl0eXR5cGUgaWYgZG9lc24ndCBhbHJlYWR5IGV4aXN0XG5cdCAgICAgICAgICBlbnRpdHlIYXNoW2lkXSA9IG5ldyBjbGFzc2VzLkVudGl0eVR5cGUoaWQpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgY3VycmVudEVudGl0eVR5cGUgPSBlbnRpdHlIYXNoW2lkXTtcblx0ICAgICAgICBjdXJyZW50RW50aXR5VHlwZS5FUE5zLnB1c2gobm9kZSk7IC8vIGFzc2lnbmUgdGhlIGN1cnJlbnQgZWxlbWVudCB0byBpdHMgY29ycmVzcG9uZGluZyBlbnRpdHl0eXBlXG5cblx0ICAgICAgICAvLyBjb2xsZWN0IGFsbCBzdGF0ZVZhcmlhYmxlcyBvZiB0aGUgY3VycmVudCBlbGVtZW50LCB3ZSBuZWVkIHRvIGFzc2lnbiBTdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbnMgdG8gdGhlbVxuXHQgICAgICAgIGZvcih2YXIgaT0wOyBpIDwgbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmxlbmd0aDsgaSsrKSB7XG5cdCAgICAgICAgICB2YXIgc3RhdGVzYW5kaW5mb3MgPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJylbaV07XG5cdCAgICAgICAgICBpZihzdGF0ZXNhbmRpbmZvcyBpbnN0YW5jZW9mIGNsYXNzZXMuU3RhdGVWYXJpYWJsZSkgeyAvLyBzdGF0ZVZhcmlhYmxlIGZvdW5kXG5cdCAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGVWYXJpYWJsZSA9IHN0YXRlc2FuZGluZm9zO1xuXHQgICAgICAgICAgICBjdXJyZW50RW50aXR5VHlwZS5hc3NpZ25TdGF0ZVZhcmlhYmxlKGN1cnJlbnRTdGF0ZVZhcmlhYmxlKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgICBjeS5lbmRCYXRjaCgpO1xuXHQgICAgICBjeS5zY3JhdGNoKCdfc2JnbnZpeicsIHtTQkdORW50aXR5VHlwZXM6IGVudGl0eUhhc2h9KTsqL1xuXG5cdFx0ICAvLyBhc3NpZ24gc3RhdGVzYW5kaW5mb3MgdG8gdGhlaXIgbGF5b3V0XG5cdFx0ICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuXHQgICAgIC8vIGN5LnN0YXJ0QmF0Y2goKTtcblx0ICAgICAgY3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHtcblx0ICAgICAgICBzZXRDb21wb3VuZEluZm9ib3hlcyhub2RlLGlzTGF5b3V0UmVxdWlyZWQsY3kpO1xuXHRcdCAgfSk7XG5cdFx0ICBcblx0XHQgIGlmKGNhbGxiYWNrKXtcblx0XHRcdCAgY2FsbGJhY2soKTtcblx0XHQgIH1cblxuXHQgICAgICAvL2N5LmVuZEJhdGNoKCk7XG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICB2YXIgc2VsZWN0aW9uQ29sb3IgPSAnI2Q2NzYxNCc7XG5cdCAgdmFyIHNiZ25TdHlsZVNoZWV0ID0gY3l0b3NjYXBlLnN0eWxlc2hlZXQoKVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICd0ZXh0LXZhbGlnbic6ICdjZW50ZXInLFxuXHQgICAgICAgICAgICAndGV4dC1oYWxpZ24nOiAnY2VudGVyJyxcblx0ICAgICAgICAgICAgJ3RleHQtb3BhY2l0eSc6IDEsXG5cdCAgICAgICAgICAgICdvcGFjaXR5JzogMSxcblx0ICAgICAgICAgICAgJ3BhZGRpbmcnOiAwXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzc11cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnc2hhcGUnOiBmdW5jdGlvbiAoZWxlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q3lTaGFwZShlbGUpO1xuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnY29udGVudCc6IGZ1bmN0aW9uIChlbGUpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5nZXRFbGVtZW50Q29udGVudChlbGUpO1xuXHQgICAgICAgICAgICB9LFxuXHRcdFx0XHRcdFx0XHQnZm9udC1zaXplJzogZnVuY3Rpb24gKGVsZSkge1xuXHRcdFx0ICAgICAgICAgIC8vIElmIG5vZGUgbGFiZWxzIGFyZSBleHBlY3RlZCB0byBiZSBhZGp1c3RlZCBhdXRvbWF0aWNhbGx5IG9yIGVsZW1lbnQgY2Fubm90IGhhdmUgbGFiZWxcblx0XHRcdCAgICAgICAgICAvLyBvciBlbGUuZGF0YSgnZm9udC1zaXplJykgaXMgbm90IGRlZmluZWQgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0TGFiZWxUZXh0U2l6ZSgpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZWxzZSByZXR1cm4gZWxlLmRhdGEoJ2ZvbnQtc2l6ZScpXG5cdFx0XHQgICAgICAgICAgdmFyIG9wdCA9IG9wdGlvbnMuYWRqdXN0Tm9kZUxhYmVsRm9udFNpemVBdXRvbWF0aWNhbGx5O1xuXHRcdFx0ICAgICAgICAgIHZhciBhZGp1c3QgPSB0eXBlb2Ygb3B0ID09PSAnZnVuY3Rpb24nID8gb3B0KCkgOiBvcHQ7XG5cblx0XHRcdCAgICAgICAgICBpZiAoIWFkanVzdCAmJiBlbGUuZGF0YSgnZm9udC1zaXplJykgIT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoJ2ZvbnQtc2l6ZScpO1xuXHRcdFx0ICAgICAgICAgIH1cblxuXHRcdFx0ICAgICAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldExhYmVsVGV4dFNpemUoZWxlKTtcblx0XHRcdCAgICAgICAgfVxuXHRcdFx0ICAgICAgfSlcblx0XHRcdCAgICAgIC5zZWxlY3RvcihcIm5vZGVbY2xhc3NdW2ZvbnQtZmFtaWx5XVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcblx0XHRcdCAgICAgICAgJ2ZvbnQtZmFtaWx5JzogZnVuY3Rpb24oIGVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlLmRhdGEoJ2ZvbnQtZmFtaWx5Jyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHQgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzXVtmb250LXN0eWxlXVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcblx0XHRcdCAgICAgICAgJ2ZvbnQtc3R5bGUnOiBmdW5jdGlvbiggZWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGUuZGF0YSgnZm9udC1zdHlsZScpXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHQgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzXVtmb250LXdlaWdodF1cIilcblx0XHRcdCAgICAgIC5zdHlsZSh7XG5cdFx0XHQgICAgICAgICdmb250LXdlaWdodCc6IGZ1bmN0aW9uKCBlbGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZS5kYXRhKCdmb250LXdlaWdodCcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHQgICAgICB9KVxuXHRcdFx0ICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzc11bY29sb3JdXCIpXG5cdFx0XHQgICAgICAuc3R5bGUoe1xuXHRcdFx0ICAgICAgICAnY29sb3InOiBmdW5jdGlvbiggZWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGUuZGF0YSgnY29sb3InKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0ICAgICAgfSlcblx0XHRcdCAgICAgIC5zZWxlY3RvcihcIm5vZGVbY2xhc3NdW2JhY2tncm91bmQtY29sb3JdXCIpXG5cdFx0XHQgICAgICAuc3R5bGUoe1xuXHRcdFx0ICAgICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGZ1bmN0aW9uKCBlbGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZS5kYXRhKCdiYWNrZ3JvdW5kLWNvbG9yJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHQgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzXVtiYWNrZ3JvdW5kLW9wYWNpdHldXCIpXG5cdFx0XHQgICAgICAuc3R5bGUoe1xuXHRcdFx0ICAgICAgICAnYmFja2dyb3VuZC1vcGFjaXR5JzogZnVuY3Rpb24oIGVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlLmRhdGEoJ2JhY2tncm91bmQtb3BhY2l0eScpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHQgICAgICB9KVxuXHRcdFx0ICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzc11bYm9yZGVyLXdpZHRoXVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcblx0XHRcdCAgICAgICAgJ2JvcmRlci13aWR0aCc6IGZ1bmN0aW9uKCBlbGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZS5kYXRhKCdib3JkZXItd2lkdGgnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0ICAgICAgfSlcblx0XHRcdCAgICAgIC5zZWxlY3RvcihcIm5vZGVbY2xhc3NdW2JvcmRlci1jb2xvcl1cIilcblx0XHRcdCAgICAgIC5zdHlsZSh7XG5cdFx0XHQgICAgICAgICdib3JkZXItY29sb3InOiBmdW5jdGlvbiggZWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGUuZGF0YSgnYm9yZGVyLWNvbG9yJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHQgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzXVt0ZXh0LXdyYXBdXCIpXG5cdFx0XHQgICAgICAuc3R5bGUoe1xuICAgICAgICAgICAgICAndGV4dC13cmFwJzogZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgICAgIHZhciBvcHQgPSBvcHRpb25zLmZpdExhYmVsc1RvTm9kZXM7XG4gICAgICAgICAgICAgICAgdmFyIGlzRml0ID0gdHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdCgpIDogb3B0O1xuICAgICAgICAgICAgICAgIGlmIChpc0ZpdCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuICdlbGxpcHNpcyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBlbGUuZGF0YSgndGV4dC13cmFwJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlXCIpXG5cdFx0XHQgICAgICAuc3R5bGUoe1xuICAgICAgICAgICAgICAndGV4dC1tYXgtd2lkdGgnOiBmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9wdCA9IG9wdGlvbnMuZml0TGFiZWxzVG9Ob2RlcztcbiAgICAgICAgICAgICAgICB2YXIgaXNGaXQgPSB0eXBlb2Ygb3B0ID09PSAnZnVuY3Rpb24nID8gb3B0KCkgOiBvcHQ7XG4gICAgICAgICAgICAgICAgaWYgKGlzRml0KSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZWxlLndpZHRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAnMTAwMHB4JztcbiAgICAgICAgICAgICAgfVxuXHRcdFx0ICAgICAgfSlcblx0XHRcdFx0XHRcdC5zZWxlY3RvcihcImVkZ2VbY2xhc3NdW2xpbmUtY29sb3JdXCIpXG5cdFx0XHQgICAgICAuc3R5bGUoe1xuXHRcdFx0ICAgICAgICAnbGluZS1jb2xvcic6IGZ1bmN0aW9uKCBlbGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZS5kYXRhKCdsaW5lLWNvbG9yJyk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHQgICAgICAgICdzb3VyY2UtYXJyb3ctY29sb3InOiBmdW5jdGlvbiggZWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGUuZGF0YSgnbGluZS1jb2xvcicpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0ICAgICAgICAndGFyZ2V0LWFycm93LWNvbG9yJzogZnVuY3Rpb24oIGVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlLmRhdGEoJ2xpbmUtY29sb3InKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0ICAgICAgfSlcblx0XHRcdCAgICAgIC5zZWxlY3RvcihcImVkZ2VbY2xhc3NdW3dpZHRoXVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcblx0XHRcdCAgICAgICAgJ3dpZHRoJzogZnVuY3Rpb24oIGVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlLmRhdGEoJ3dpZHRoJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdCAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzPSdhc3NvY2lhdGlvbiddLFtjbGFzcz0nZGlzc29jaWF0aW9uJ10sW2NsYXNzPSdhbmQnXSxbY2xhc3M9J29yJ10sW2NsYXNzPSdub3QnXSxbY2xhc3M9J3Byb2Nlc3MnXSxbY2xhc3M9J29taXR0ZWQgcHJvY2VzcyddLFtjbGFzcz0ndW5jZXJ0YWluIHByb2Nlc3MnXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdzaGFwZS1wb2x5Z29uLXBvaW50cyc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIGlmIChncmFwaFV0aWxpdGllcy5wb3J0c0VuYWJsZWQgPT09IHRydWUgJiYgZWxlLmRhdGEoJ3BvcnRzJykubGVuZ3RoID09PSAyKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgcG9ydHMgb2YgdGhlIGVkZ2UgYXJlIHN5bWV0cmljIGFjY29yZGluZyB0byB0aGUgbm9kZSBjZW50ZXIgc28ganVzdCBjaGVja2luZyBvbmUgcG9ydCBpcyBlbm91Z2ggZm9yIHVzXG5cdCAgICAgICAgICAgICAgICB2YXIgcG9ydCA9IGVsZS5kYXRhKCdwb3J0cycpWzBdO1xuXHQgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBvcnRzIGFyZSBsb2NhdGVkIGFib3ZlL2JlbG93IG9mIHRoZSBub2RlIHRoZW4gdGhlIG9yaWVudGF0aW9uIGlzICd2ZXJ0aWNhbCcgZWxzZSBpdCBpcyAnaG9yaXpvbnRhbCdcblx0ICAgICAgICAgICAgICAgIHZhciBvcmllbnRhdGlvbiA9IHBvcnQueCA9PT0gMCA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG5cdCAgICAgICAgICAgICAgICAvLyBUaGUgaGFsZiB3aWR0aCBvZiB0aGUgYWN0dWFsIHNoYXBlIGRpc2NsdWRpbmcgdGhlIHBvcnRzXG5cdCAgICAgICAgICAgICAgICB2YXIgc2hhcGVIVyA9IG9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gNTAgLyBNYXRoLmFicyhwb3J0LnkpIDogNTAgLyBNYXRoLmFicyhwb3J0LngpO1xuXHQgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBjbGFzcyBvZiB0aGUgbm9kZVxuXHQgICAgICAgICAgICAgICAgdmFyIF9jbGFzcyA9IGVsZS5kYXRhKCdjbGFzcycpO1xuXHQgICAgICAgICAgICAgICAgLy8gSWYgY2xhc3MgaXMgb25lIG9mIHByb2Nlc3MsIG9taXR0ZWQgcHJvY2VzcyBvciB1bmNlcnRhaW4gcHJvY2VzcyB0aGVuIHRoZSB0eXBlIG9mIGFjdHVhbCBzaGFwZSBpcyAncmVjdGFuZ2xlJyBlbHNlIGl0IGlzICdjaXJjbGUnXG5cdCAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IF9jbGFzcy5lbmRzV2l0aCgncHJvY2VzcycpID8gJ3JlY3RhbmdsZScgOiAnY2lyY2xlJztcblxuXHQgICAgICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBwb2x5Z29uIHN0cmluZyB3aXRoIGFib3ZlIHBhcmFtZXRlcnMgYW5kIHJldHVybiBpdFxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRlU2hhcGVXaXRoUG9ydFN0cmluZygwLjAxLCBzaGFwZUhXLCB0eXBlLCBvcmllbnRhdGlvbik7XG5cdCAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgLy8gVGhpcyBlbGVtZW50IGlzIG5vdCBleHBlY3RlZCB0byBoYXZlIGEgcG95Z29uaWFsIHNoYXBlIChCZWNhdXNlIGl0IGRvZXMgbm90IGhhdmUgMiBwb3J0cykganVzdCByZXR1cm4gYSB0cml2aWFsIHN0cmluZyBoZXJlIG5vdCB0byBoYXZlIGEgcnVuIHRpbWUgYnVnXG5cdCAgICAgICAgICAgICAgcmV0dXJuICctMSAtMSAxIDEgMSAwJztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGVbY2xhc3M9J3BlcnR1cmJpbmcgYWdlbnQnXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdzaGFwZS1wb2x5Z29uLXBvaW50cyc6ICctMSwgLTEsICAgLTAuNSwgMCwgIC0xLCAxLCAgIDEsIDEsICAgMC41LCAwLCAxLCAtMSdcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzPSd0YWcnXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdzaGFwZS1wb2x5Z29uLXBvaW50cyc6ICctMSwgLTEsICAgMC4yNSwgLTEsICAgMSwgMCwgICAgMC4yNSwgMSwgICAgLTEsIDEnXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpwYXJlbnRbY2xhc3NePSdjb21wbGV4J11cIikgLy8gc3RhcnQgd2l0aCBjb21wbGV4XG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3RleHQtdmFsaWduJzogJ2JvdHRvbScsXG5cdCAgICAgICAgICAgICd0ZXh0LWhhbGlnbic6ICdjZW50ZXInLFxuXHQgICAgICAgICAgICAndGV4dC1tYXJnaW4teSc6IGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q29tcGxleE1hcmdpbixcblx0ICAgICAgICAgICAgJ3BhZGRpbmcnOiBlbGVtZW50VXRpbGl0aWVzLmdldENvbXBsZXhQYWRkaW5nLFxuXHQgICAgICAgICAgICAnY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMnIDogJ2V4Y2x1ZGUnLFxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGVbY2xhc3M9J2NvbXBhcnRtZW50J11cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAndGV4dC12YWxpZ24nOiAnYm90dG9tJyxcblx0ICAgICAgICAgICAgJ3RleHQtaGFsaWduJzogJ2NlbnRlcicsXG5cdCAgICAgICAgICAgICd0ZXh0LW1hcmdpbi15JyA6IC0xICogb3B0aW9ucy5leHRyYUNvbXBhcnRtZW50UGFkZGluZyxcblx0ICAgICAgICAgICAgJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJyA6ICdleGNsdWRlJyxcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlOnBhcmVudFtjbGFzcz0nY29tcGFydG1lbnQnXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdwYWRkaW5nJzogZnVuY3Rpb24oKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGdyYXBoVXRpbGl0aWVzLmdldENvbXBvdW5kUGFkZGluZ3MoKSArIG9wdGlvbnMuZXh0cmFDb21wYXJ0bWVudFBhZGRpbmc7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzPSdzdWJtYXAnXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICd0ZXh0LXZhbGlnbic6ICdib3R0b20nLFxuXHQgICAgICAgICAgICAndGV4dC1oYWxpZ24nOiAnY2VudGVyJyxcblx0ICAgICAgICAgICAgJ3RleHQtbWFyZ2luLXknIDogLTEgKiBvcHRpb25zLmV4dHJhQ29tcGFydG1lbnRQYWRkaW5nLFxuXHQgICAgICAgICAgICAnY29tcG91bmQtc2l6aW5nLXdydC1sYWJlbHMnIDogJ2V4Y2x1ZGUnLFxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6cGFyZW50W2NsYXNzPSdzdWJtYXAnXSxbY2xhc3M9J3RvcG9sb2d5IGdyb3VwJ11cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAncGFkZGluZyc6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBncmFwaFV0aWxpdGllcy5nZXRDb21wb3VuZFBhZGRpbmdzKCkgKyBvcHRpb25zLmV4dHJhQ29tcGFydG1lbnRQYWRkaW5nO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpjaGlsZGxlc3NbYmJveF1cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnd2lkdGgnOiAnZGF0YShiYm94LncpJyxcblx0ICAgICAgICAgICAgJ2hlaWdodCc6ICdkYXRhKGJib3guaCknXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpwYXJlbnRbbWluSGVpZ2h0XVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdtaW4taGVpZ2h0JzogZnVuY3Rpb24oZWxlKSB7XG5cdCAgICAgICAgICAgICAgaWYgKGdyYXBoVXRpbGl0aWVzLmNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoJ21pbkhlaWdodCcpO1xuXHQgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpwYXJlbnRbbWluSGVpZ2h0Qmlhc1RvcF1cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnbWluLWhlaWdodC1iaWFzLXRvcCc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIHZhciBtaW4gPSBwYXJzZUZsb2F0KGVsZS5kYXRhKCdtaW5IZWlnaHRCaWFzVG9wJykpO1xuXHQgICAgICAgICAgICAgIHJldHVybiAobWluID49IDAgPyBtaW4gOiAxMDApICsgJyUnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpwYXJlbnRbbWluSGVpZ2h0Qmlhc0JvdHRvbV1cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnbWluLWhlaWdodC1iaWFzLWJvdHRvbSc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIHZhciBtaW4gPSBwYXJzZUZsb2F0KGVsZS5kYXRhKCdtaW5IZWlnaHRCaWFzQm90dG9tJykpO1xuXHQgICAgICAgICAgICAgIHJldHVybiAobWluID49IDAgPyBtaW4gOiAxMDApICsgJyUnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpwYXJlbnRbbWluV2lkdGhdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ21pbi13aWR0aCc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIGlmIChncmFwaFV0aWxpdGllcy5jb21wb3VuZFNpemVzQ29uc2lkZXJlZCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCdtaW5XaWR0aCcpO1xuXHQgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgIHJldHVybiAwO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpwYXJlbnRbbWluV2lkdGhCaWFzTGVmdF1cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnbWluLXdpZHRoLWJpYXMtbGVmdCc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIHZhciBtaW4gPSBwYXJzZUZsb2F0KGVsZS5kYXRhKCdtaW5XaWR0aEJpYXNMZWZ0JykpO1xuXHQgICAgICAgICAgICAgIHJldHVybiAobWluID49IDAgPyBtaW4gOiAxMDApICsgJyUnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpwYXJlbnRbbWluV2lkdGhCaWFzUmlnaHRdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ21pbi13aWR0aC1iaWFzLXJpZ2h0JzogZnVuY3Rpb24oZWxlKSB7XG5cdCAgICAgICAgICAgICAgdmFyIG1pbiA9IHBhcnNlRmxvYXQoZWxlLmRhdGEoJ21pbldpZHRoQmlhc1JpZ2h0JykpO1xuXHQgICAgICAgICAgICAgIHJldHVybiAobWluID49IDAgPyBtaW4gOiAxMDApICsgJyUnO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZS5jeS1leHBhbmQtY29sbGFwc2UtY29sbGFwc2VkLW5vZGVcIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnYm9yZGVyLXN0eWxlJzogJ2Rhc2hlZCdcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlOnNlbGVjdGVkXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ2JvcmRlci1jb2xvcic6IHNlbGVjdGlvbkNvbG9yLFxuXHQgICAgICAgICAgICAndGFyZ2V0LWFycm93LWNvbG9yJzogJyMwMDAnLFxuXHRcdFx0XHQndGV4dC1vdXRsaW5lLWNvbG9yJzogJyMwMDAnLFxuXHRcdFx0XHQnYm9yZGVyLXdpZHRoJzogZnVuY3Rpb24oZWxlKXtcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgocGFyc2VGbG9hdChlbGUuZGF0YSgnYm9yZGVyLXdpZHRoJykpICsgMiwgMyk7XG5cdFx0XHRcdCAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6YWN0aXZlXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ2JhY2tncm91bmQtb3BhY2l0eSc6IDAuNywgJ292ZXJsYXktY29sb3InOiBzZWxlY3Rpb25Db2xvcixcblx0ICAgICAgICAgICAgJ292ZXJsYXktcGFkZGluZyc6ICcxNCdcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJlZGdlXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ2N1cnZlLXN0eWxlJzogJ2JlemllcicsXG5cdCAgICAgICAgICAgICd0YXJnZXQtYXJyb3ctZmlsbCc6IGZ1bmN0aW9uKGVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldEN5VGFyZ2V0QXJyb3dGaWxsKGVsZSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdCAgICAgICAgICAgICdzb3VyY2UtYXJyb3ctZmlsbCc6ICdob2xsb3cnLFxuXHQgICAgICAgICAgICAndGV4dC1ib3JkZXItY29sb3InOiBmdW5jdGlvbiAoZWxlKSB7XG5cdCAgICAgICAgICAgICAgaWYgKGVsZS5zZWxlY3RlZCgpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uQ29sb3I7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIHJldHVybiBlbGUuY3NzKCdsaW5lLWNvbG9yJyk7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdjb2xvcic6IGZ1bmN0aW9uIChlbGUpIHtcblx0ICAgICAgICAgICAgICBpZiAoZWxlLnNlbGVjdGVkKCkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25Db2xvcjtcblx0ICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGVsZS5jc3MoJ2xpbmUtY29sb3InKTtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2Fycm93LXNjYWxlJzogMS4yNVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcImVkZ2UuY3ktZXhwYW5kLWNvbGxhcHNlLW1ldGEtZWRnZVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdsaW5lLWNvbG9yJzogJyNDNEM0QzQnLFxuXHQgICAgICAgICAgICAnc291cmNlLWFycm93LWNvbG9yJzogJyNDNEM0QzQnLFxuXHQgICAgICAgICAgICAndGFyZ2V0LWFycm93LWNvbG9yJzogJyNDNEM0QzQnXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwiZWRnZTpzZWxlY3RlZFwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdsaW5lLWNvbG9yJzogc2VsZWN0aW9uQ29sb3IsXG5cdCAgICAgICAgICAgICdzb3VyY2UtYXJyb3ctY29sb3InOiBzZWxlY3Rpb25Db2xvcixcblx0XHRcdFx0J3RhcmdldC1hcnJvdy1jb2xvcic6IHNlbGVjdGlvbkNvbG9yLFxuXHRcdFx0XHQnd2lkdGgnOiBmdW5jdGlvbihlbGUpe1xuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChwYXJzZUZsb2F0KGVsZS5kYXRhKCd3aWR0aCcpKSArIDIsIDMpO1xuXHRcdFx0XHQgIH1cblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJlZGdlOmFjdGl2ZVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAwLjcsICdvdmVybGF5LWNvbG9yJzogc2VsZWN0aW9uQ29sb3IsXG5cdCAgICAgICAgICAgICdvdmVybGF5LXBhZGRpbmcnOiAnOCdcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJlZGdlW2NhcmRpbmFsaXR5ID4gMF1cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAndGV4dC1yb3RhdGlvbic6ICdhdXRvcm90YXRlJyxcblx0ICAgICAgICAgICAgJ3RleHQtYmFja2dyb3VuZC1zaGFwZSc6ICdyZWN0YW5nbGUnLFxuXHQgICAgICAgICAgICAndGV4dC1ib3JkZXItb3BhY2l0eSc6ICcxJyxcblx0ICAgICAgICAgICAgJ3RleHQtYm9yZGVyLXdpZHRoJzogJzEnLFxuXHQgICAgICAgICAgICAndGV4dC1iYWNrZ3JvdW5kLWNvbG9yJzogJ3doaXRlJyxcblx0ICAgICAgICAgICAgJ3RleHQtYmFja2dyb3VuZC1vcGFjaXR5JzogJzEnXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwiZWRnZVtjbGFzcz0nY29uc3VtcHRpb24nXVtjYXJkaW5hbGl0eSA+IDBdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3NvdXJjZS1sYWJlbCc6IGZ1bmN0aW9uIChlbGUpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gJycgKyBlbGUuZGF0YSgnY2FyZGluYWxpdHknKTtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3NvdXJjZS10ZXh0LW1hcmdpbi15JzogJy0xMCcsXG5cdCAgICAgICAgICAgICdzb3VyY2UtdGV4dC1vZmZzZXQnOiAnMTgnLFxuXHRcdFx0XHRcdFx0XHQnZm9udC1zaXplJzogJzEzJ1xuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcImVkZ2VbY2xhc3M9J3Byb2R1Y3Rpb24nXVtjYXJkaW5hbGl0eSA+IDBdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3RhcmdldC1sYWJlbCc6IGZ1bmN0aW9uIChlbGUpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gJycgKyBlbGUuZGF0YSgnY2FyZGluYWxpdHknKTtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3RhcmdldC10ZXh0LW1hcmdpbi15JzogJy0xMCcsXG5cdCAgICAgICAgICAgICd0YXJnZXQtdGV4dC1vZmZzZXQnOiAnMTgnLFxuXHRcdFx0XHRcdFx0XHQnZm9udC1zaXplJzogJzEzJ1xuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcImVkZ2VbY2xhc3NdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3RhcmdldC1hcnJvdy1zaGFwZSc6IGZ1bmN0aW9uIChlbGUpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5nZXRDeUFycm93U2hhcGUoZWxlKTtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3NvdXJjZS1hcnJvdy1zaGFwZSc6ICdub25lJyxcblx0ICAgICAgICAgICAgJ3NvdXJjZS1lbmRwb2ludCc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldEVuZFBvaW50KGVsZSwgJ3NvdXJjZScpO1xuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAndGFyZ2V0LWVuZHBvaW50JzogZnVuY3Rpb24oZWxlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0RW5kUG9pbnQoZWxlLCAndGFyZ2V0Jyk7XG5cdCAgICAgICAgICAgIH0sXG5cdFx0XHRcdFx0XHRcdCdsaW5lLXN0eWxlJzogZnVuY3Rpb24gKGVsZSkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldEFycmF5TGluZVN0eWxlKGVsZSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJjb3JlXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3NlbGVjdGlvbi1ib3gtY29sb3InOiBzZWxlY3Rpb25Db2xvcixcblx0ICAgICAgICAgICAgJ3NlbGVjdGlvbi1ib3gtb3BhY2l0eSc6ICcwLjInLCAnc2VsZWN0aW9uLWJveC1ib3JkZXItY29sb3InOiBzZWxlY3Rpb25Db2xvclxuXHQgICAgICAgICAgfSk7XG5cbiAgICB2YXIgc2Jnbk5ldHdvcmtDb250YWluZXIgPSAkKG9wdGlvbnMubmV0d29ya0NvbnRhaW5lclNlbGVjdG9yKTtcblxuICAgIC8vIGNyZWF0ZSBhbmQgaW5pdCBjeXRvc2NhcGU6XG4gICAgY3l0b3NjYXBlKHtcbiAgICAgIGNvbnRhaW5lcjogc2Jnbk5ldHdvcmtDb250YWluZXIsXG4gICAgICBzdHlsZTogc2JnblN0eWxlU2hlZXQsXG4gICAgICBzaG93T3ZlcmxheTogZmFsc2UsIG1pblpvb206IDAuMTI1LCBtYXhab29tOiAxNixcbiAgICAgIGJveFNlbGVjdGlvbkVuYWJsZWQ6IHRydWUsXG4gICAgICBtb3Rpb25CbHVyOiB0cnVlLFxuICAgICAgd2hlZWxTZW5zaXRpdml0eTogMC4xLFxuICAgICAgcmVhZHk6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Y3kgPSB0aGlzO1xuICAgICAgICAvLyBJZiB1bmRvYWJsZSByZWdpc3RlciB1bmRvL3JlZG8gYWN0aW9uc1xuICAgICAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgICAgIHJlZ2lzdGVyVW5kb1JlZG9BY3Rpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZEN5RXZlbnRzKCk7XG4gICAgICB9XG4gICAgfSk7XG5cdH07XG5cblx0c2JnbkN5SW5zdGFuY2UuZ2V0Q3kgPSBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIGN5O1xuXHR9O1xuXG5cdHJldHVybiBzYmduQ3lJbnN0YW5jZTtcbn07XG4iLCIvKlxuICogUmVuZGVyIHNiZ24gc3BlY2lmaWMgc2hhcGVzIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGN5dG9zY2FwZS5qcyBjb3JlXG4gKi9cblxudmFyIGxpYnMgPSByZXF1aXJlKCcuLi91dGlsaXRpZXMvbGliLXV0aWxpdGllcycpLmdldExpYnMoKTtcbnZhciBqUXVlcnkgPSAkID0gbGlicy5qUXVlcnk7XG52YXIgY3l0b3NjYXBlID0gbGlicy5jeXRvc2NhcGU7XG5cbnZhciBjeU1hdGggPSBtYXRoID0gY3l0b3NjYXBlLm1hdGg7XG52YXIgY3lCYXNlTm9kZVNoYXBlcyA9IGN5dG9zY2FwZS5iYXNlTm9kZVNoYXBlcztcbnZhciBjeVN0eWxlUHJvcGVydGllcyA9IGN5dG9zY2FwZS5zdHlsZVByb3BlcnRpZXM7XG5cbnZhciBjbGFzc2VzID0gcmVxdWlyZSgnLi4vdXRpbGl0aWVzL2NsYXNzZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciAkJCA9IGN5dG9zY2FwZTtcblxuICAvKlxuICAqIFRha2VuIGZyb20gY3l0b3NjYXBlLmpzIGFuZCBtb2RpZmllZCBzbyB0aGF0IGl0IGNhbiBiZSB1dGlsaXplZCBmcm9tIHNiZ252aXpcbiAgKiBpbiBhIGZsZXhhYmxlIHdheS4gSXQgaXMgbmVlZGVkIGJlY2F1c2UgdGhlIHNiZ252aXogc2hhcGVzIHdvdWxkIG5lZWQgdG8gc3Ryb2tlXG4gICogYm9yZGVyIG1vcmUgdGhhbiBvbmNlIGFzIHRoZXkgd291bGQgaGF2ZSBpbmZvYm94ZXMsIG11bHRpbWVycyBldGMuXG4gICogRXh0ZW5kcyB0aGUgc3R5bGUgcHJvcGVydGllcyBvZiBub2RlIHdpdGggdGhlIGdpdmVuIG9uZXMgdGhlbiBzdHJva2VzIHRoZSBib3JkZXIuXG4gICogV291bGQgbmVlZGVkIHRvIGJlIHNsaWdodGx5IHVwZGF0ZWQgZHVyaW5nIGN5dG9zY2FwZSB1cGdyYWRlcyBpZiByZWxhdGVkIGZ1bmN0aW9uIGluXG4gICogQ3l0b3NjYXBlLmpzIGlzIHVwZGF0ZWQuIEluZm9ybWF0aW9uIGFib3V0IHdoZXJlIGlzIHRoZSByZWxhdGVkIGZ1bmN0aW9uIGlzIGxvY2F0ZWRcbiAgKiBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGUgdGhhdCBsaXN0IHRoZSBjaGFuZ2VzIGRvbmUgaW4gaXZpcyBjeXRvc2NhcGUgZm9yay5cbiAgKi9cbiAgJCQuc2Jnbi5kcmF3Qm9yZGVyID0gZnVuY3Rpb24oeyBjb250ZXh0LCBub2RlLCBib3JkZXJXaWR0aCwgYm9yZGVyQ29sb3IsIGJvcmRlclN0eWxlLCBib3JkZXJPcGFjaXR5IH0pIHtcblxuICAgIGJvcmRlcldpZHRoID0gYm9yZGVyV2lkdGggfHwgKCBub2RlICYmIHBhcnNlRmxvYXQoIG5vZGUuY3NzKCAnYm9yZGVyLXdpZHRoJyApICkgKTtcblxuICAgIGlmKCBib3JkZXJXaWR0aCA+IDAgKXtcbiAgICAgIHZhciBwYXJlbnRPcGFjaXR5ID0gKCBub2RlICYmIG5vZGUuZWZmZWN0aXZlT3BhY2l0eSgpICkgfHwgMTtcblxuICAgICAgYm9yZGVyU3R5bGUgPSBib3JkZXJTdHlsZSB8fCAoIG5vZGUgJiYgbm9kZS5jc3MoICdib3JkZXItc3R5bGUnICkgKTtcbiAgICAgIGJvcmRlckNvbG9yID0gYm9yZGVyQ29sb3IgfHwgKCBub2RlICYmIG5vZGUuY3NzKCAnYm9yZGVyLWNvbG9yJyApICk7XG4gICAgICBib3JkZXJPcGFjaXR5ID0gKFxuICAgICAgICAgIGJvcmRlck9wYWNpdHkgfHwgKCBub2RlICYmIG5vZGUuY3NzKCAnYm9yZGVyLW9wYWNpdHknICkgKVxuICAgICAgICApICogcGFyZW50T3BhY2l0eTtcblxuICAgICAgdmFyIHByb3BzVG9SZXN0b3JlID0gWyAnbGluZVdpZHRoJywgJ2xpbmVDYXAnLCAnc3Ryb2tlU3R5bGUnLCAnZ2xvYmFsQWxwaGEnIF07XG4gICAgICB2YXIgaW5pdGlhbFByb3BzID0ge307XG5cbiAgICAgIHByb3BzVG9SZXN0b3JlLmZvckVhY2goIGZ1bmN0aW9uKCBwcm9wTmFtZSApIHtcbiAgICAgICAgaW5pdGlhbFByb3BzWyBwcm9wTmFtZSBdID0gY29udGV4dFsgcHJvcE5hbWUgXTtcbiAgICAgIH0gKTtcblxuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBib3JkZXJXaWR0aDtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9ICdidXR0JztcbiAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBib3JkZXJDb2xvcjtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBib3JkZXJPcGFjaXR5O1xuXG4gICAgICBpZiggY29udGV4dC5zZXRMaW5lRGFzaCApeyAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgc3dpdGNoKCBib3JkZXJTdHlsZSApe1xuICAgICAgICAgIGNhc2UgJ2RvdHRlZCc6XG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKCBbIDEsIDEgXSApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdkYXNoZWQnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCggWyA0LCAyIF0gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnc29saWQnOlxuICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6XG4gICAgICAgICAgICBjb250ZXh0LnNldExpbmVEYXNoKCBbIF0gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG5cbiAgICAgIGlmKCBib3JkZXJTdHlsZSA9PT0gJ2RvdWJsZScgKXtcbiAgICAgICAgY29udGV4dC5saW5lV2lkdGggPSBib3JkZXJXaWR0aCAvIDM7XG5cbiAgICAgICAgbGV0IGdjbyA9IGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdkZXN0aW5hdGlvbi1vdXQnO1xuXG4gICAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG5cbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBnY287XG4gICAgICB9XG5cbiAgICAgIC8vIHJlc2V0IGluIGNhc2Ugd2UgY2hhbmdlZCB0aGUgYm9yZGVyIHN0eWxlXG4gICAgICBpZiggY29udGV4dC5zZXRMaW5lRGFzaCApeyAvLyBmb3IgdmVyeSBvdXRvZmRhdGUgYnJvd3NlcnNcbiAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCggWyBdICk7XG4gICAgICB9XG5cbiAgICAgIHByb3BzVG9SZXN0b3JlLmZvckVhY2goIGZ1bmN0aW9uKCBwcm9wTmFtZSApIHtcbiAgICAgICAgY29udGV4dFsgcHJvcE5hbWUgXSA9IGluaXRpYWxQcm9wc1sgcHJvcE5hbWUgXTtcbiAgICAgIH0gKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gVGFrZW4gZnJvbSBjeXRvc2NhcGUuanMgYW5kIG1vZGlmaWVkXG4gIHZhciBkcmF3Um91bmRSZWN0YW5nbGVQYXRoID0gJCQuc2Jnbi5kcmF3Um91bmRSZWN0YW5nbGVQYXRoID0gZnVuY3Rpb24oXG4gICAgY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmFkaXVzICl7XG5cbiAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgICB2YXIgY29ybmVyUmFkaXVzID0gcmFkaXVzIHx8IGN5TWF0aC5nZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyggd2lkdGgsIGhlaWdodCApO1xuXG4gICAgaWYoIGNvbnRleHQuYmVnaW5QYXRoICl7IGNvbnRleHQuYmVnaW5QYXRoKCk7IH1cblxuICAgIC8vIFN0YXJ0IGF0IHRvcCBtaWRkbGVcbiAgICBjb250ZXh0Lm1vdmVUbyggeCwgeSAtIGhhbGZIZWlnaHQgKTtcbiAgICAvLyBBcmMgZnJvbSBtaWRkbGUgdG9wIHRvIHJpZ2h0IHNpZGVcbiAgICBjb250ZXh0LmFyY1RvKCB4ICsgaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCwgeCArIGhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzICk7XG4gICAgLy8gQXJjIGZyb20gcmlnaHQgc2lkZSB0byBib3R0b21cbiAgICBjb250ZXh0LmFyY1RvKCB4ICsgaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCwgeSArIGhhbGZIZWlnaHQsIGNvcm5lclJhZGl1cyApO1xuICAgIC8vIEFyYyBmcm9tIGJvdHRvbSB0byBsZWZ0IHNpZGVcbiAgICBjb250ZXh0LmFyY1RvKCB4IC0gaGFsZldpZHRoLCB5ICsgaGFsZkhlaWdodCwgeCAtIGhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzICk7XG4gICAgLy8gQXJjIGZyb20gbGVmdCBzaWRlIHRvIHRvcEJvcmRlclxuICAgIGNvbnRleHQuYXJjVG8oIHggLSBoYWxmV2lkdGgsIHkgLSBoYWxmSGVpZ2h0LCB4LCB5IC0gaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzICk7XG4gICAgLy8gSm9pbiBsaW5lXG4gICAgY29udGV4dC5saW5lVG8oIHgsIHkgLSBoYWxmSGVpZ2h0ICk7XG5cblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH07XG4gIFxuICAvLyBUYWtlbiBmcm9tIGN5dG9zY2FwZS5qc1xuICB2YXIgZHJhd1BvbHlnb25QYXRoID0gZnVuY3Rpb24oXG4gICAgY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcG9pbnRzICl7XG5cbiAgICB2YXIgaGFsZlcgPSB3aWR0aCAvIDI7XG4gICAgdmFyIGhhbGZIID0gaGVpZ2h0IC8gMjtcblxuICAgIGlmKCBjb250ZXh0LmJlZ2luUGF0aCApeyBjb250ZXh0LmJlZ2luUGF0aCgpOyB9XG5cbiAgICBjb250ZXh0Lm1vdmVUbyggeCArIGhhbGZXICogcG9pbnRzWzBdLCB5ICsgaGFsZkggKiBwb2ludHNbMV0gKTtcblxuICAgIGZvciggdmFyIGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aCAvIDI7IGkrKyApe1xuICAgICAgY29udGV4dC5saW5lVG8oIHggKyBoYWxmVyAqIHBvaW50c1sgaSAqIDJdLCB5ICsgaGFsZkggKiBwb2ludHNbIGkgKiAyICsgMV0gKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9O1xuICBcbiAgdmFyIHNiZ25TaGFwZXMgPSAkJC5zYmduLnNiZ25TaGFwZXMgPSB7XG4gICAgJ3NvdXJjZSBhbmQgc2luayc6IHRydWUsXG4gICAgJ251Y2xlaWMgYWNpZCBmZWF0dXJlJzogdHJ1ZSxcbiAgICAnY29tcGxleCc6IHRydWUsXG4gICAgJ21hY3JvbW9sZWN1bGUnOiB0cnVlLFxuICAgICdzaW1wbGUgY2hlbWljYWwnOiB0cnVlLFxuICAgICdiaW9sb2dpY2FsIGFjdGl2aXR5JzogdHJ1ZSxcbiAgICAnY29tcGFydG1lbnQnOiB0cnVlXG4gIH07XG5cbiAgdmFyIHRvdGFsbHlPdmVycmlkZW5Ob2RlU2hhcGVzID0gJCQuc2Jnbi50b3RhbGx5T3ZlcnJpZGVuTm9kZVNoYXBlcyA9IHtcbiAgICAnbWFjcm9tb2xlY3VsZSc6IHRydWUsXG4gICAgJ251Y2xlaWMgYWNpZCBmZWF0dXJlJzogdHJ1ZSxcbiAgICAnc2ltcGxlIGNoZW1pY2FsJzogdHJ1ZSxcbiAgICAnY29tcGxleCc6IHRydWUsXG4gICAgJ2Jpb2xvZ2ljYWwgYWN0aXZpdHknOiB0cnVlLFxuICAgICdjb21wYXJ0bWVudCc6IHRydWVcbiAgfTtcblxuICB2YXIgY2FuSGF2ZUluZm9Cb3hTaGFwZXMgPSAkJC5zYmduLmNhbkhhdmVJbmZvQm94U2hhcGVzID0ge1xuICAgICdzaW1wbGUgY2hlbWljYWwnOiB0cnVlLFxuICAgICdtYWNyb21vbGVjdWxlJzogdHJ1ZSxcbiAgICAnbnVjbGVpYyBhY2lkIGZlYXR1cmUnOiB0cnVlLFxuICAgICdjb21wbGV4JzogdHJ1ZSxcbiAgICAnYmlvbG9naWNhbCBhY3Rpdml0eSc6IHRydWUsXG4gICAgJ2NvbXBhcnRtZW50JzogdHJ1ZVxuICB9O1xuXG4gIHZhciBjYW5CZU11bHRpbWVyU2hhcGVzID0gJCQuc2Jnbi5jYW5CZU11bHRpbWVyU2hhcGVzID0ge1xuICAgICdtYWNyb21vbGVjdWxlJzogdHJ1ZSxcbiAgICAnY29tcGxleCc6IHRydWUsXG4gICAgJ251Y2xlaWMgYWNpZCBmZWF0dXJlJzogdHJ1ZSxcbiAgICAnc2ltcGxlIGNoZW1pY2FsJzogdHJ1ZVxuICB9O1xuXG4gIGN5TWF0aC5jYWxjdWxhdGVEaXN0YW5jZSA9IGZ1bmN0aW9uIChwb2ludDEsIHBvaW50Mikge1xuICAgIHZhciBkaXN0YW5jZSA9IE1hdGgucG93KHBvaW50MVswXSAtIHBvaW50MlswXSwgMikgKyBNYXRoLnBvdyhwb2ludDFbMV0gLSBwb2ludDJbMV0sIDIpO1xuICAgIHJldHVybiBNYXRoLnNxcnQoZGlzdGFuY2UpO1xuICB9O1xuXG4gICQkLnNiZ24uY29sb3JzID0ge1xuICAgIGNsb25lOiBcIiM4MzgzODNcIlxuICB9O1xuXG4gICQkLnNiZ24uZ2V0RGVmYXVsdENvbXBsZXhDb3JuZXJMZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gMjQ7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3U3RhdGVBbmRJbmZvcyA9IGZ1bmN0aW9uIChub2RlLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZKSB7XG4gICAgdmFyIGxheW91dHMgPSBub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJyk7XG5cbiAgICBmb3IgKHZhciBzaWRlIGluIGxheW91dHMpIHtcbiAgICAgIHZhciBsYXlvdXQgPSBsYXlvdXRzW3NpZGVdO1xuICAgICAgY2xhc3Nlcy5BdXhVbml0TGF5b3V0LmRyYXcobGF5b3V0LCBub2RlLmN5KCksIGNvbnRleHQpO1xuICAgIH1cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3SW5mb0JveCA9IGZ1bmN0aW9uKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNoYXBlTmFtZSkge1xuICAgIHN3aXRjaCAoc2hhcGVOYW1lKSB7XG4gICAgICBjYXNlICdyb3VuZHJlY3RhbmdsZSc6XG4gICAgICAgIGN5QmFzZU5vZGVTaGFwZXNbJ3JvdW5kcmVjdGFuZ2xlJ10uZHJhdyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdib3R0b21yb3VuZHJlY3RhbmdsZSc6XG4gICAgICAgICQkLnNiZ24uZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VsbGlwc2UnOlxuICAgICAgICBjeUJhc2VOb2RlU2hhcGVzWydlbGxpcHNlJ10uZHJhdyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb21wbGV4JzpcbiAgICAgICAgJCQuc2Jnbi5kcmF3Q29tcGxleCggY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgaGVpZ2h0IC8gMiApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BlcnR1cmJpbmcgYWdlbnQnOlxuICAgICAgICB2YXIgcG9pbnRzID0gJCQuc2Jnbi5nZW5lcmF0ZVBlcnR1cmJpbmdBZ2VudFBvaW50cygpO1xuICAgICAgICBkcmF3UG9seWdvblBhdGgoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcG9pbnRzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdyZWN0YW5nbGUnOlxuICAgICAgICBjeUJhc2VOb2RlU2hhcGVzWydyZWN0YW5nbGUnXS5kcmF3KGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0YWRpdW0nOlxuICAgICAgICAkJC5zYmduLmRyYXdSb3VuZFJlY3RhbmdsZVBhdGgoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgTWF0aC5taW4od2lkdGggLyAyLCBoZWlnaHQgLyAyLCAxNSkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH07XG5cbiAgLy8gJCQuc2Jnbi5BZlNoYXBlQXJnc0ZuID0gZnVuY3Rpb24gKHNlbGYpe1xuXHQvLyAgIHJldHVybiBbc2VsZi5iYm94LncsIHNlbGYuYmJveC5oLCBjbGFzc2VzLmdldEF1eFVuaXRDbGFzcyhzZWxmKS5nZXRQYXJlbnQoc2VsZikuZGF0YShcImNsYXNzXCIpXTtcbiAgLy8gfVxuXG5cbiAgJCQuc2Jnbi5udWNsZWljQWNpZENoZWNrUG9pbnQgPSBmdW5jdGlvbiAoeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgcG9pbnRzLCBjb3JuZXJSYWRpdXMpIHtcblxuICAgIC8vY2hlY2sgcmVjdGFuZ2xlIGF0IHRvcFxuICAgIGlmIChjeU1hdGgucG9pbnRJbnNpZGVQb2x5Z29uKHgsIHksIHBvaW50cyxcbiAgICAgICAgICAgIGNlbnRlclgsIGNlbnRlclkgLSBjb3JuZXJSYWRpdXMgLyAyLCB3aWR0aCwgaGVpZ2h0IC0gY29ybmVyUmFkaXVzIC8gMywgWzAsIC0xXSxcbiAgICAgICAgICAgIHBhZGRpbmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvL2NoZWNrIHJlY3RhbmdsZSBhdCBib3R0b21cbiAgICBpZiAoY3lNYXRoLnBvaW50SW5zaWRlUG9seWdvbih4LCB5LCBwb2ludHMsXG4gICAgICAgICAgICBjZW50ZXJYLCBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cyAvIDIsIHdpZHRoIC0gMiAqIGNvcm5lclJhZGl1cywgY29ybmVyUmFkaXVzLCBbMCwgLTFdLFxuICAgICAgICAgICAgcGFkZGluZykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vY2hlY2sgZWxsaXBzZXNcbiAgICB2YXIgY2hlY2tJbkVsbGlwc2UgPSBmdW5jdGlvbiAoeCwgeSwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZykge1xuICAgICAgeCAtPSBjZW50ZXJYO1xuICAgICAgeSAtPSBjZW50ZXJZO1xuXG4gICAgICB4IC89ICh3aWR0aCAvIDIgKyBwYWRkaW5nKTtcbiAgICAgIHkgLz0gKGhlaWdodCAvIDIgKyBwYWRkaW5nKTtcblxuICAgICAgcmV0dXJuIChNYXRoLnBvdyh4LCAyKSArIE1hdGgucG93KHksIDIpIDw9IDEpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGJvdHRvbSByaWdodCBxdWFydGVyIGNpcmNsZVxuICAgIGlmIChjaGVja0luRWxsaXBzZSh4LCB5LFxuICAgICAgICAgICAgY2VudGVyWCArIHdpZHRoIC8gMiAtIGNvcm5lclJhZGl1cyxcbiAgICAgICAgICAgIGNlbnRlclkgKyBoZWlnaHQgLyAyIC0gY29ybmVyUmFkaXVzLFxuICAgICAgICAgICAgY29ybmVyUmFkaXVzICogMiwgY29ybmVyUmFkaXVzICogMiwgcGFkZGluZykpIHtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgYm90dG9tIGxlZnQgcXVhcnRlciBjaXJjbGVcbiAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSxcbiAgICAgICAgICAgIGNlbnRlclggLSB3aWR0aCAvIDIgKyBjb3JuZXJSYWRpdXMsXG4gICAgICAgICAgICBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cyxcbiAgICAgICAgICAgIGNvcm5lclJhZGl1cyAqIDIsIGNvcm5lclJhZGl1cyAqIDIsIHBhZGRpbmcpKSB7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvL3dlIG5lZWQgdG8gZm9yY2Ugb3BhY2l0eSB0byAxIHNpbmNlIHdlIG1pZ2h0IGhhdmUgc3RhdGUgYW5kIGluZm8gYm94ZXMuXG4gIC8vaGF2aW5nIG9wYXF1ZSBub2RlcyB3aGljaCBoYXZlIHN0YXRlIGFuZCBpbmZvIGJveGVzIGdpdmVzIHVucGxlYXNlbnQgcmVzdWx0cy5cbiAgJCQuc2Jnbi5mb3JjZU9wYWNpdHlUb09uZSA9IGZ1bmN0aW9uIChub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHBhcmVudE9wYWNpdHkgPSBub2RlLmVmZmVjdGl2ZU9wYWNpdHkoKTtcbiAgICBpZiAocGFyZW50T3BhY2l0eSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gXCJyZ2JhKFwiXG4gICAgICAgICAgICArIG5vZGUuX3ByaXZhdGUuc3R5bGVbXCJiYWNrZ3JvdW5kLWNvbG9yXCJdLnZhbHVlWzBdICsgXCIsXCJcbiAgICAgICAgICAgICsgbm9kZS5fcHJpdmF0ZS5zdHlsZVtcImJhY2tncm91bmQtY29sb3JcIl0udmFsdWVbMV0gKyBcIixcIlxuICAgICAgICAgICAgKyBub2RlLl9wcml2YXRlLnN0eWxlW1wiYmFja2dyb3VuZC1jb2xvclwiXS52YWx1ZVsyXSArIFwiLFwiXG4gICAgICAgICAgICArICgxICogbm9kZS5jc3MoJ29wYWNpdHknKSAqIHBhcmVudE9wYWNpdHkpICsgXCIpXCI7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3U2ltcGxlQ2hlbWljYWxQYXRoID0gZnVuY3Rpb24gKFxuICAgICAgICAgIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcblxuICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICAgIC8vdmFyIGNvcm5lclJhZGl1cyA9ICQkLm1hdGguZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMod2lkdGgsIGhlaWdodCk7XG4gICAgdmFyIGNvcm5lclJhZGl1cyA9IE1hdGgubWluKGhhbGZXaWR0aCwgaGFsZkhlaWdodCk7XG5cbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgLy8gU3RhcnQgYXQgdG9wIG1pZGRsZVxuICAgIGNvbnRleHQubW92ZVRvKHgsIHktaGFsZkhlaWdodCk7XG4gICAgLy8gQXJjIGZyb20gbWlkZGxlIHRvcCB0byByaWdodCBzaWRlXG4gICAgY29udGV4dC5hcmNUbyh4K2hhbGZXaWR0aCwgeS1oYWxmSGVpZ2h0LCB4K2hhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzKTtcbiAgICAvLyBBcmMgZnJvbSByaWdodCBzaWRlIHRvIGJvdHRvbVxuICAgIGNvbnRleHQuYXJjVG8oeCtoYWxmV2lkdGgsIHkraGFsZkhlaWdodCwgeCwgeStoYWxmSGVpZ2h0LCBjb3JuZXJSYWRpdXMpO1xuICAgIC8vIEFyYyBmcm9tIGJvdHRvbSB0byBsZWZ0IHNpZGVcbiAgICBjb250ZXh0LmFyY1RvKHgtaGFsZldpZHRoLCB5K2hhbGZIZWlnaHQsIHgtaGFsZldpZHRoLCB5LCBjb3JuZXJSYWRpdXMpO1xuICAgIC8vIEFyYyBmcm9tIGxlZnQgc2lkZSB0byB0b3BCb3JkZXJcbiAgICBjb250ZXh0LmFyY1RvKHgtaGFsZldpZHRoLCB5LWhhbGZIZWlnaHQsIHgsIHktaGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgICAvLyBKb2luIGxpbmVcbiAgICBjb250ZXh0LmxpbmVUbyh4LCB5LWhhbGZIZWlnaHQpO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICB9O1xuXG4gICQkLnNiZ24uZHJhd1NpbXBsZUNoZW1pY2FsID0gZnVuY3Rpb24gKFxuICAgICAgICAgIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAkJC5zYmduLmRyYXdTaW1wbGVDaGVtaWNhbFBhdGgoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gc2ltcGxlQ2hlbWljYWxMZWZ0Q2xvbmUoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBjbG9uZU1hcmtlciwgb3BhY2l0eSkge1xuICAgIGlmIChjbG9uZU1hcmtlciAhPSBudWxsKSB7XG4gICAgICB2YXIgb2xkR2xvYmFsQWxwaGEgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9wYWNpdHk7XG4gICAgICB2YXIgb2xkU3R5bGUgPSBjb250ZXh0LmZpbGxTdHlsZTtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJCQuc2Jnbi5jb2xvcnMuY2xvbmU7XG5cbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICAgIHZhciBtYXJrZXJCZWdpblggPSBjZW50ZXJYIC0gd2lkdGgvMiAqIE1hdGguc2luKE1hdGguUEkgLyAzKTtcbiAgICAgIHZhciBtYXJrZXJCZWdpblkgPSBjZW50ZXJZICsgaGVpZ2h0LzIgKiBNYXRoLmNvcyhNYXRoLlBJIC8gMyk7XG4gICAgICB2YXIgbWFya2VyRW5kWCA9IGNlbnRlclg7XG4gICAgICB2YXIgbWFya2VyRW5kWSA9IG1hcmtlckJlZ2luWTtcblxuICAgICAgY29udGV4dC5tb3ZlVG8obWFya2VyQmVnaW5YLCBtYXJrZXJCZWdpblkpO1xuICAgICAgY29udGV4dC5saW5lVG8obWFya2VyRW5kWCwgbWFya2VyRW5kWSk7XG4gICAgICBjb250ZXh0LmFyYyhjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aC8yLCAzICogTWF0aC5QSSAvIDYsIDUgKiBNYXRoLlBJIC8gNik7XG5cbiAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBvbGRTdHlsZTtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvbGRHbG9iYWxBbHBoYTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gc2ltcGxlQ2hlbWljYWxSaWdodENsb25lKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgd2lkdGgsIGhlaWdodCwgY2xvbmVNYXJrZXIsIG9wYWNpdHkpIHtcbiAgICBpZiAoY2xvbmVNYXJrZXIgIT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEdsb2JhbEFscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcGFjaXR5O1xuICAgICAgdmFyIG9sZFN0eWxlID0gY29udGV4dC5maWxsU3R5bGU7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICQkLnNiZ24uY29sb3JzLmNsb25lO1xuXG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICB2YXIgbWFya2VyQmVnaW5YID0gY2VudGVyWDtcbiAgICAgIHZhciBtYXJrZXJCZWdpblkgPSBjZW50ZXJZICsgaGVpZ2h0LzIgKiBNYXRoLmNvcyhNYXRoLlBJIC8gMyk7XG4gICAgICB2YXIgbWFya2VyRW5kWCA9IGNlbnRlclggKyB3aWR0aC8yICogTWF0aC5zaW4oTWF0aC5QSSAvIDMpO1xuICAgICAgdmFyIG1hcmtlckVuZFkgPSBtYXJrZXJCZWdpblk7XG5cbiAgICAgIGNvbnRleHQubW92ZVRvKG1hcmtlckJlZ2luWCwgbWFya2VyQmVnaW5ZKTtcbiAgICAgIGNvbnRleHQubGluZVRvKG1hcmtlckVuZFgsIG1hcmtlckVuZFkpO1xuICAgICAgY29udGV4dC5hcmMoY2VudGVyWCwgY2VudGVyWSwgd2lkdGgvMiwgTWF0aC5QSSAvIDYsIDMgKiBNYXRoLlBJIC8gNik7XG5cbiAgICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBvbGRTdHlsZTtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvbGRHbG9iYWxBbHBoYTtcbiAgICB9XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3RWxsaXBzZVBhdGggPSBmdW5jdGlvbiAoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICAgIGN5QmFzZU5vZGVTaGFwZXNbJ2VsbGlwc2UnXS5kcmF3UGF0aChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgfTtcblxuICAkJC5zYmduLmRyYXdCYXJyZWwgPSBmdW5jdGlvbiAoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICAgIGN5QmFzZU5vZGVTaGFwZXNbJ2JhcnJlbCddLmRyYXcoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGUgPSBmdW5jdGlvbiAoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICAgIGN5QmFzZU5vZGVTaGFwZXNbJ2JvdHRvbXJvdW5kcmVjdGFuZ2xlJ10uZHJhdyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgfTtcblxuICAvLyBUaGUgb2xkIGRyYXcgaW1wbGVtZW50YXRpb24gZm9yIG51Y2xlaWMgYWNpZCBmZWF0dXJlXG4gIC8vIG5vdyBvbmx5IHVzZWQgZm9yIGNsb25lIG1hcmtlciBkcmF3aW5nIG9mIG51Y2xlaWMgYWNpZCBmZWF0dXJlXG4gIC8vIGFuZCBtYWNyb21vbGVjdWxlIHNoYXBlcyBiZWNhdXNlICdib3R0b21yb3VuZHJlY3RhbmdsZScgZnVuY3Rpb25cbiAgLy8gb2YgY3l0b3NjYXBlLmpzIGRpZCBub3QgZml0IHdlbGwgZm9yIHRoaXMgcHVycG9zZS5cbiAgLy8gRGlkIG5vdCBjaGFuZ2UgdGhlIG5hbWUgeWV0IGRpcmVjdGx5IGFzIGRyYXdOdWNBY2lkRmVhdHVyZUNsb25lIGV0Yy5cbiAgLy8gYmVjYXVzZSBpdCBhY3R1YWxseSBkcmF3cyBhIG51Y2xlaWMgYWNpZCBmZWF0dXJlIGluIGEgZGlmZmVyZW50IHdheS5cbiAgJCQuc2Jnbi5kcmF3TnVjQWNpZEZlYXR1cmUyID0gZnVuY3Rpb24gKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzKSB7XG4gICAgY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzIHx8IGN5TWF0aC5nZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KTtcbiAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgICB2YXIgbGVmdCA9IGNlbnRlclggLSBoYWxmV2lkdGgsIHJpZ2h0ID0gY2VudGVyWCArIGhhbGZXaWR0aDtcbiAgICB2YXIgYm90dG9tID0gY2VudGVyWSAtIGhhbGZIZWlnaHQsIHRvcCA9IGNlbnRlclkgKyBoYWxmSGVpZ2h0O1xuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG5cbiAgICBjb250ZXh0Lm1vdmVUbyhsZWZ0LCBib3R0b20pO1xuICAgIGNvbnRleHQubGluZVRvKHJpZ2h0LCBib3R0b20pO1xuICAgIGNvbnRleHQubGluZVRvKHJpZ2h0LCBjZW50ZXJZKTtcbiAgICBjb250ZXh0LmFyY1RvKHJpZ2h0LCB0b3AsIGNlbnRlclgsIHRvcCwgY29ybmVyUmFkaXVzKTtcbiAgICBjb250ZXh0LmFyY1RvKGxlZnQsIHRvcCwgbGVmdCwgY2VudGVyWSwgY29ybmVyUmFkaXVzKTtcbiAgICBjb250ZXh0LmxpbmVUbyhsZWZ0LCBib3R0b20pO1xuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgICBjb250ZXh0LmZpbGwoKTtcbiAgfTtcblxuICAvKlxuICAgKiBDb2RlIHRha2VuIGZyb20gaHR0cHM6Ly9qc3BlcmYuY29tL3N0cmluZy1wcm90b3R5cGUtZW5kc3dpdGhcbiAgICogRGlyZWN0IGltcGxlbWVudGF0aW9uIHNlZW1zIHRvIHdvcmsgYmV0dGVyLlxuICAgKiBVc2luZyB0aGlzIGltcHJvdmVzIGlzTXVsdGltZXIoKSBwZXJmb3JtYW5jZS5cbiAgICogTWFrZXMgaXQgdGFrZSAwLjEgb3IgMC4yJSBsZXNzIHRpbWUgZnJvbSB0aGUgd2hvbGVcbiAgICogbG9hZGluZyBwcm9jZXNzLCBkb3duIGZyb20gfjAuNCUgaW5pdGlhbGx5LlxuICAgKi9cbiAgZnVuY3Rpb24gZW5kc1dpdGgoc3RyLCBwYXR0ZXJuKSB7XG4gICAgZm9yICh2YXIgaSA9IHBhdHRlcm4ubGVuZ3RoLCBsID0gc3RyLmxlbmd0aDsgaS0tOykge1xuICAgICAgaWYgKHN0ci5jaGFyQXQoLS1sKSAhPSBwYXR0ZXJuLmNoYXJBdChpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgJCQuc2Jnbi5pc011bHRpbWVyID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICB2YXIgc2JnbkNsYXNzID0gbm9kZS5fcHJpdmF0ZS5kYXRhLmNsYXNzO1xuICAgIGlmIChzYmduQ2xhc3MgJiYgZW5kc1dpdGgoc2JnbkNsYXNzLCBcIm11bHRpbWVyXCIpKVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vdGhpcyBmdW5jdGlvbiBpcyBjcmVhdGVkIHRvIGhhdmUgc2FtZSBjb3JuZXIgbGVuZ3RoIHdoZW5cbiAgLy9jb21wbGV4J3Mgd2lkdGggb3IgaGVpZ2h0IGlzIGNoYW5nZWRcbiAgJCQuc2Jnbi5nZW5lcmF0ZUNvbXBsZXhTaGFwZVBvaW50cyA9IGZ1bmN0aW9uIChjb3JuZXJMZW5ndGgsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAvL2NwIHN0YW5kcyBmb3IgY29ybmVyIHByb3BvcnRpb25cbiAgICB2YXIgY3BYID0gTWF0aC5taW4oY29ybmVyTGVuZ3RoLCAwLjUgKiB3aWR0aCkgLyB3aWR0aDtcbiAgICB2YXIgY3BZID0gTWF0aC5taW4oY29ybmVyTGVuZ3RoLCAwLjUgKiBoZWlnaHQpIC8gaGVpZ2h0O1xuXG4gICAgdmFyIGNvbXBsZXhQb2ludHMgPSBbLTEgKyBjcFgsIC0xLCAtMSwgLTEgKyBjcFksIC0xLCAxIC0gY3BZLCAtMSArIGNwWCxcbiAgICAgIDEsIDEgLSBjcFgsIDEsIDEsIDEgLSBjcFksIDEsIC0xICsgY3BZLCAxIC0gY3BYLCAtMV07XG5cbiAgICByZXR1cm4gY29tcGxleFBvaW50cztcbiAgfTtcblxuICAkJC5zYmduLmdlbmVyYXRlUGVydHVyYmluZ0FnZW50UG9pbnRzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFstMSwgLTEsICAgLTAuNSwgMCwgIC0xLCAxLCAgIDEsIDEsICAgMC41LCAwLCAxLCAtMV07XG4gIH07XG5cbiAgJCQuc2Jnbi5nZXREZWZhdWx0TXVsdGltZXJQYWRkaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIDU7XG4gIH07XG5cbiAgLy8gZHJhdyBiYWNrZ3JvdW5kIGltYWdlIG9mIG5vZGVzXG4gICQkLnNiZ24uZHJhd0ltYWdlID0gZnVuY3Rpb24oIGNvbnRleHQsIGltZ09iaiApIHtcbiAgICBpZihpbWdPYmope1xuICAgICAgY29udGV4dC5jbGlwKCk7XG4gICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWdPYmouaW1nLCAwLCAwLCBpbWdPYmouaW1nVywgaW1nT2JqLmltZ0gsIGltZ09iai54LCBpbWdPYmoueSwgaW1nT2JqLncsIGltZ09iai5oICk7XG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG4gIH07XG5cbiAgY3lTdHlsZVByb3BlcnRpZXMudHlwZXMubm9kZVNoYXBlLmVudW1zLnB1c2goXG4gICAgJ3NvdXJjZSBhbmQgc2luaycsICdudWNsZWljIGFjaWQgZmVhdHVyZScsICdjb21wbGV4JywgJ21hY3JvbW9sZWN1bGUnLFxuICAgICdzaW1wbGUgY2hlbWljYWwnLCAnYmlvbG9naWNhbCBhY3Rpdml0eScsICdjb21wYXJ0bWVudCdcbiAgKTtcblxuICAkJC5zYmduLnJlZ2lzdGVyU2Jnbk5vZGVTaGFwZXMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZURyYXdGY24oIHsgcGxhaW5EcmF3RmNuLCBleHRyYURyYXdGY24sIGNhbkJlTXVsdGltZXIsIGNsb25lTWFya2VyRmNuLFxuICAgICAgY2FuSGF2ZUluZm9Cb3gsIG11bHRpbWVyUGFkZGluZyB9ICkge1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oIGNvbnRleHQsIG5vZGUsIGltZ09iaiApIHtcblxuICAgICAgICB2YXIgYm9yZGVyV2lkdGggPSBwYXJzZUZsb2F0KG5vZGUuY3NzKCdib3JkZXItd2lkdGgnKSk7XG4gICAgICAgIHZhciB3aWR0aCA9IG5vZGUub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGg7XG4gICAgICAgIHZhciBoZWlnaHQgPSBub2RlLm91dGVySGVpZ2h0KCkgLSBib3JkZXJXaWR0aDtcbiAgICAgICAgdmFyIGNlbnRlclggPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLng7XG4gICAgICAgIHZhciBjZW50ZXJZID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi55O1xuICAgICAgICB2YXIgYmdPcGFjaXR5ID0gbm9kZS5jc3MoJ2JhY2tncm91bmQtb3BhY2l0eScpO1xuICAgICAgICB2YXIgaXNDbG9uZWQgPSBjbG9uZU1hcmtlckZjbiAhPSBudWxsICYmIG5vZGUuX3ByaXZhdGUuZGF0YS5jbG9uZW1hcmtlcjtcblxuICAgICAgICBpZiAoIGNhbkJlTXVsdGltZXIgJiYgJCQuc2Jnbi5pc011bHRpbWVyKCBub2RlICkgKSB7XG4gICAgICAgICAgLy9hZGQgbXVsdGltZXIgc2hhcGVcbiAgICAgICAgICBwbGFpbkRyYXdGY24oIGNvbnRleHQsIGNlbnRlclggKyBtdWx0aW1lclBhZGRpbmcsXG4gICAgICAgICAgICAgICAgICBjZW50ZXJZICsgbXVsdGltZXJQYWRkaW5nLCB3aWR0aCwgaGVpZ2h0ICk7XG5cbiAgICAgICAgICAkJC5zYmduLmRyYXdCb3JkZXIoIHsgY29udGV4dCwgbm9kZSB9ICk7XG5cbiAgICAgICAgICBpZiAoIGV4dHJhRHJhd0ZjbiApIHtcbiAgICAgICAgICAgIGV4dHJhRHJhd0ZjbiggY29udGV4dCwgY2VudGVyWCArIG11bHRpbWVyUGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyWSArIG11bHRpbWVyUGFkZGluZywgd2lkdGgsIGhlaWdodCApO1xuXG5cbiAgICAgICAgICAgICQkLnNiZ24uZHJhd0JvcmRlciggeyBjb250ZXh0LCBub2RlIH0gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIGlzQ2xvbmVkICkge1xuICAgICAgICAgICAgY2xvbmVNYXJrZXJGY24oY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyWCArIG11bHRpbWVyUGFkZGluZywgY2VudGVyWSArIG11bHRpbWVyUGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggLSBib3JkZXJXaWR0aCwgaGVpZ2h0IC0gYm9yZGVyV2lkdGgsIGlzQ2xvbmVkLCB0cnVlLCBiZ09wYWNpdHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHBsYWluRHJhd0ZjbiggY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCApO1xuXG4gICAgICAgICQkLnNiZ24uZHJhd0JvcmRlciggeyBjb250ZXh0LCBub2RlIH0gKTtcbiAgICAgICAgJCQuc2Jnbi5kcmF3SW1hZ2UoIGNvbnRleHQsIGltZ09iaiApO1xuXG4gICAgICAgIGlmICggZXh0cmFEcmF3RmNuICkge1xuICAgICAgICAgICAgZXh0cmFEcmF3RmNuKCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0ICk7XG5cbiAgICAgICAgICAgICQkLnNiZ24uZHJhd0JvcmRlciggeyBjb250ZXh0LCBub2RlIH0gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggaXNDbG9uZWQgKSB7XG4gICAgICAgICAgY2xvbmVNYXJrZXJGY24oY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLSBib3JkZXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0IC0gYm9yZGVyV2lkdGgsIGlzQ2xvbmVkLCBmYWxzZSwgYmdPcGFjaXR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggY2FuSGF2ZUluZm9Cb3ggKSB7XG4gICAgICAgICAgdmFyIG9sZFN0eWxlID0gY29udGV4dC5maWxsU3R5bGU7XG4gICAgICAgICAgJCQuc2Jnbi5mb3JjZU9wYWNpdHlUb09uZShub2RlLCBjb250ZXh0KTtcbiAgICAgICAgICAkJC5zYmduLmRyYXdTdGF0ZUFuZEluZm9zKG5vZGUsIGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclkpO1xuICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gb2xkU3R5bGU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVJbnRlcnNlY3RMaW5lRmNuKCB7IHBsYWluSW50ZXJzZWN0TGluZUZjbiwgY2FuQmVNdWx0aW1lciwgY2xvbmVNYXJrZXJGY24sXG4gICAgICBjYW5IYXZlSW5mb0JveCwgbXVsdGltZXJQYWRkaW5nIH0gKSB7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiggbm9kZSwgeCwgeSApIHtcbiAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gcGFyc2VGbG9hdChub2RlLmNzcygnYm9yZGVyLXdpZHRoJykpO1xuICAgICAgICB2YXIgcGFkZGluZyA9IGJvcmRlcldpZHRoIC8gMjtcbiAgICAgICAgdmFyIHdpZHRoID0gbm9kZS5vdXRlcldpZHRoKCkgLSBib3JkZXJXaWR0aDtcbiAgICAgICAgdmFyIGhlaWdodCA9IG5vZGUub3V0ZXJIZWlnaHQoKSAtIGJvcmRlcldpZHRoO1xuICAgICAgICB2YXIgY2VudGVyWCA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueDtcbiAgICAgICAgdmFyIGNlbnRlclkgPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLnk7XG5cbiAgICAgICAgdmFyIGludGVyc2VjdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAoIGNhbkhhdmVJbmZvQm94ICkge1xuICAgICAgICAgIHZhciBzdGF0ZUFuZEluZm9JbnRlcnNlY3RMaW5lcyA9ICQkLnNiZ24uaW50ZXJzZWN0TGluZVN0YXRlQW5kSW5mb0JveGVzKFxuICAgICAgICAgICAgICAgICAgbm9kZSwgeCwgeSk7XG5cbiAgICAgICAgICBpbnRlcnNlY3Rpb25zID0gaW50ZXJzZWN0aW9ucy5jb25jYXQoIHN0YXRlQW5kSW5mb0ludGVyc2VjdExpbmVzICk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbm9kZUludGVyc2VjdExpbmVzID0gcGxhaW5JbnRlcnNlY3RMaW5lRmNuKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLFxuICAgICAgICAgICAgICAgIGhlaWdodCwgeCwgeSwgcGFkZGluZyk7XG5cbiAgICAgICAgaW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdGlvbnMuY29uY2F0KCBub2RlSW50ZXJzZWN0TGluZXMgKTtcblxuICAgICAgICBpZiAoIGNhbkJlTXVsdGltZXIgJiYgJCQuc2Jnbi5pc011bHRpbWVyKG5vZGUpICkge1xuICAgICAgICAgIHZhciBtdWx0aW1lckludGVyc2VjdGlvbkxpbmVzID0gcGxhaW5JbnRlcnNlY3RMaW5lRmNuKFxuICAgICAgICAgICAgICAgICAgY2VudGVyWCArIG11bHRpbWVyUGFkZGluZywgY2VudGVyWSArIG11bHRpbWVyUGFkZGluZywgd2lkdGgsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQsIHgsIHksIHBhZGRpbmcpO1xuXG4gICAgICAgICAgaW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdGlvbnMuY29uY2F0KCBtdWx0aW1lckludGVyc2VjdGlvbkxpbmVzICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJCQuc2Jnbi5jbG9zZXN0SW50ZXJzZWN0aW9uUG9pbnQoW3gsIHldLCBpbnRlcnNlY3Rpb25zKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVDaGVja1BvaW50RmNuKCB7IHBsYWluQ2hlY2tQb2ludEZjbiwgY2FuQmVNdWx0aW1lciwgY2xvbmVNYXJrZXJGY24sXG4gICAgICBjYW5IYXZlSW5mb0JveCwgbXVsdGltZXJQYWRkaW5nIH0gKSB7XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiggeCwgeSwgbm9kZSwgdGhyZXNob2xkICkge1xuXG4gICAgICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZCB8fCAwO1xuICAgICAgICB2YXIgYm9yZGVyV2lkdGggPSBwYXJzZUZsb2F0KG5vZGUuY3NzKCdib3JkZXItd2lkdGgnKSk7XG4gICAgICAgIHZhciB3aWR0aCA9IG5vZGUub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGggKyAyICogdGhyZXNob2xkO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gbm9kZS5vdXRlckhlaWdodCgpIC0gYm9yZGVyV2lkdGggKyAyICogdGhyZXNob2xkO1xuICAgICAgICB2YXIgY2VudGVyWCA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueDtcbiAgICAgICAgdmFyIGNlbnRlclkgPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLnk7XG4gICAgICAgIHZhciBwYWRkaW5nID0gYm9yZGVyV2lkdGggLyAyO1xuXG4gICAgICAgIHZhciBub2RlQ2hlY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gcGxhaW5DaGVja1BvaW50RmNuKCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHN0YXRlQW5kSW5mb0NoZWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbkhhdmVJbmZvQm94ICYmICQkLnNiZ24uY2hlY2tQb2ludFN0YXRlQW5kSW5mb0JveGVzKHgsIHksIG5vZGUsIHRocmVzaG9sZCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIG11bHRpbWVyQ2hlY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gY2FuQmVNdWx0aW1lciAmJiAkJC5zYmduLmlzTXVsdGltZXIobm9kZSlcbiAgICAgICAgICAgICAgICAgICYmIHBsYWluQ2hlY2tQb2ludEZjbiggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRlclggKyBtdWx0aW1lclBhZGRpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJZICsgbXVsdGltZXJQYWRkaW5nICk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5vZGVDaGVjaygpIHx8IHN0YXRlQW5kSW5mb0NoZWNrKCkgfHwgbXVsdGltZXJDaGVjaygpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgc2hhcGVOYW1lcyA9IFsgXCJzaW1wbGUgY2hlbWljYWxcIiwgXCJtYWNyb21vbGVjdWxlXCIsIFwiY29tcGxleFwiLFxuICAgICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiLCBcInNvdXJjZSBhbmQgc2lua1wiLCBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIixcbiAgICAgIFwiY29tcGFydG1lbnRcIiwgXCJvbGRDb21wYXJ0bWVudFwiXG4gICAgXTtcblxuICAgIHNoYXBlTmFtZXMuZm9yRWFjaCggZnVuY3Rpb24oIHNoYXBlTmFtZSApIHtcbiAgICAgIHZhciBwbGFpbkRyYXdGY24gPSAkJC5zYmduLnBsYWluRHJhd1sgc2hhcGVOYW1lIF07XG4gICAgICB2YXIgcGxhaW5JbnRlcnNlY3RMaW5lRmNuID0gJCQuc2Jnbi5wbGFpbkludGVyc2VjdExpbmVbIHNoYXBlTmFtZSBdO1xuICAgICAgdmFyIHBsYWluQ2hlY2tQb2ludEZjbiA9ICQkLnNiZ24ucGxhaW5DaGVja1BvaW50WyBzaGFwZU5hbWUgXTtcbiAgICAgIHZhciBjYW5CZU11bHRpbWVyID0gJCQuc2Jnbi5jYW5CZU11bHRpbWVyU2hhcGVzWyBzaGFwZU5hbWUgXTtcbiAgICAgIHZhciBjbG9uZU1hcmtlckZjbiA9ICQkLnNiZ24uY2xvbmVNYXJrZXJbIHNoYXBlTmFtZSBdO1xuICAgICAgdmFyIGNhbkhhdmVJbmZvQm94ID0gJCQuc2Jnbi5jYW5IYXZlSW5mb0JveFNoYXBlc1sgc2hhcGVOYW1lIF07XG4gICAgICB2YXIgbXVsdGltZXJQYWRkaW5nID0gJCQuc2Jnbi5nZXREZWZhdWx0TXVsdGltZXJQYWRkaW5nKCk7XG4gICAgICB2YXIgZXh0cmFEcmF3RmNuID0gJCQuc2Jnbi5leHRyYURyYXdbIHNoYXBlTmFtZSBdO1xuXG4gICAgICB2YXIgZHJhdyA9IGdlbmVyYXRlRHJhd0ZjbiggeyBwbGFpbkRyYXdGY24sIGNhbkJlTXVsdGltZXIsIGNsb25lTWFya2VyRmNuLFxuICAgICAgICBjYW5IYXZlSW5mb0JveCwgbXVsdGltZXJQYWRkaW5nLCBleHRyYURyYXdGY25cbiAgICAgIH0gKTtcblxuICAgICAgdmFyIGludGVyc2VjdExpbmUgPSB0b3RhbGx5T3ZlcnJpZGVuTm9kZVNoYXBlc1sgc2hhcGVOYW1lIF0gP1xuICAgICAgICBnZW5lcmF0ZUludGVyc2VjdExpbmVGY24oIHsgcGxhaW5JbnRlcnNlY3RMaW5lRmNuLCBjYW5CZU11bHRpbWVyLCBjbG9uZU1hcmtlckZjbixcbiAgICAgICAgICBjYW5IYXZlSW5mb0JveCwgbXVsdGltZXJQYWRkaW5nXG4gICAgICAgIH0gKSA6IHBsYWluSW50ZXJzZWN0TGluZUZjbjtcblxuICAgICAgdmFyIGNoZWNrUG9pbnQgPSB0b3RhbGx5T3ZlcnJpZGVuTm9kZVNoYXBlc1sgc2hhcGVOYW1lIF0gP1xuICAgICAgICBnZW5lcmF0ZUNoZWNrUG9pbnRGY24oIHsgcGxhaW5DaGVja1BvaW50RmNuLCBjYW5CZU11bHRpbWVyLCBjbG9uZU1hcmtlckZjbixcbiAgICAgICAgICBjYW5IYXZlSW5mb0JveCwgbXVsdGltZXJQYWRkaW5nXG4gICAgICAgIH0gKSA6IHBsYWluQ2hlY2tQb2ludEZjbjtcblxuICAgICAgdmFyIHNoYXBlID0geyBkcmF3LCBpbnRlcnNlY3RMaW5lLCBjaGVja1BvaW50LCBtdWx0aW1lclBhZGRpbmcgfTtcblxuICAgICAgY3lCYXNlTm9kZVNoYXBlc1sgc2hhcGVOYW1lIF0gPSBzaGFwZTtcbiAgICB9ICk7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3RWxsaXBzZSA9IGZ1bmN0aW9uIChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgLy8kJC5zYmduLmRyYXdFbGxpcHNlUGF0aChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAvL2NvbnRleHQuZmlsbCgpO1xuICAgIGN5QmFzZU5vZGVTaGFwZXNbJ2VsbGlwc2UnXS5kcmF3KGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd0NvbXBsZXggPSBmdW5jdGlvbiggY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29ybmVyTGVuZ3RoICkge1xuICAgIGNvcm5lckxlbmd0aCA9IGNvcm5lckxlbmd0aCB8fCAkJC5zYmduLmdldERlZmF1bHRDb21wbGV4Q29ybmVyTGVuZ3RoKCk7XG4gICAgdmFyIHBvaW50cyA9ICQkLnNiZ24uZ2VuZXJhdGVDb21wbGV4U2hhcGVQb2ludHMoY29ybmVyTGVuZ3RoLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGRyYXdQb2x5Z29uUGF0aChjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMpO1xuXG4gICAgY29udGV4dC5maWxsKCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3Q3Jvc3NMaW5lID0gZnVuY3Rpb24oIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7XG4gICAgdmFyIHBvaW50cyA9IGN5TWF0aC5nZW5lcmF0ZVVuaXROZ29uUG9pbnRzKDQsIDApO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICB2YXIgc2NhbGVYID0gd2lkdGggKiBNYXRoLnNxcnQoMikgLyAyLCBzY2FsZVkgPSAgaGVpZ2h0ICogTWF0aC5zcXJ0KDIpIC8gMjtcblxuICAgIGNvbnRleHQubW92ZVRvKHggKyBzY2FsZVggKiBwb2ludHNbMl0sIHkgKyBzY2FsZVkgKiBwb2ludHNbM10pO1xuICAgIGNvbnRleHQubGluZVRvKHggKyBzY2FsZVggKiBwb2ludHNbNl0sIHkgKyBzY2FsZVkgKiBwb2ludHNbN10pO1xuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3QmlvbG9naWNhbEFjdGl2aXR5ID0gZnVuY3Rpb24oIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7XG4gICAgdmFyIHBvaW50cyA9ICQkLnNiZ24uZ2VuZXJhdGVCaW9sb2dpY2FsQWN0aXZpdHlQb2ludHMoKTtcbiAgICBkcmF3UG9seWdvblBhdGgoY29udGV4dCxcbiAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsIHBvaW50cyk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3Um91bmRSZWN0YW5nbGUgPSBmdW5jdGlvbiggY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCApIHtcbiAgICBkcmF3Um91bmRSZWN0YW5nbGVQYXRoKCBjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5nZW5lcmF0ZU51Y2xlaWNBY2lkUG9pbnRzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGN5TWF0aC5nZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNCwgMCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5nZW5lcmF0ZUJpb2xvZ2ljYWxBY3Rpdml0eVBvaW50cyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjeU1hdGguZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApO1xuICB9O1xuXG4gICQkLnNiZ24uZ2VuZXJhdGVDb21wYXJ0bWVudFBvaW50cyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBtYXRoLmdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKTtcbiAgfTtcblxuICAkJC5zYmduLnBsYWluRHJhdyA9IHtcbiAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiAkJC5zYmduLmRyYXdTaW1wbGVDaGVtaWNhbCxcbiAgICBcIm1hY3JvbW9sZWN1bGVcIjogJCQuc2Jnbi5kcmF3Um91bmRSZWN0YW5nbGUsXG4gICAgXCJjb21wbGV4XCI6ICQkLnNiZ24uZHJhd0NvbXBsZXgsXG4gICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiAkJC5zYmduLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZSxcbiAgICBcInNvdXJjZSBhbmQgc2lua1wiOiAkJC5zYmduLmRyYXdFbGxpcHNlLFxuICAgIFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiOiAkJC5zYmduLmRyYXdCaW9sb2dpY2FsQWN0aXZpdHksXG4gICAgXCJjb21wYXJ0bWVudFwiOiAkJC5zYmduLmRyYXdCYXJyZWwsXG4gICAgXCJvbGRDb21wYXJ0bWVudFwiOiAkJC5zYmduLmRyYXdSb3VuZFJlY3RhbmdsZVxuICB9O1xuXG4gIC8vIFRvIGRlZmluZSBhbiBleHRyYSBkcmF3aW5nIGZvciB0aGUgbm9kZSB0aGF0IGlzIHJlbmRlcmVkIGF0IHRoZSB2ZXJ5IGVuZCxcbiAgLy8gZXZlbiBhZnRlciB0aGUgbm9kZSBiYWNrZ3JvdW5kIGltYWdlIGlzIGRyYXduLlxuICAvLyBFLmcuIGNyb3NzIGxpbmVzIG9mIFwic291cmNlIGFuZCBzaW5rXCIgbm9kZXMuXG4gICQkLnNiZ24uZXh0cmFEcmF3ID0ge1xuICAgIFwic291cmNlIGFuZCBzaW5rXCI6ICQkLnNiZ24uZHJhd0Nyb3NzTGluZVxuICB9O1xuXG4gICQkLnNiZ24ucGxhaW5JbnRlcnNlY3RMaW5lID0ge1xuICAgIFwic2ltcGxlIGNoZW1pY2FsXCI6IGZ1bmN0aW9uKCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nICkge1xuICAgICAgcmV0dXJuIGN5QmFzZU5vZGVTaGFwZXNbXCJlbGxpcHNlXCJdLmludGVyc2VjdExpbmUoIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcgKTtcbiAgICB9LFxuICAgIFwibWFjcm9tb2xlY3VsZVwiOiBmdW5jdGlvbiggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApIHtcbiAgICAgIHJldHVybiAkJC5zYmduLnJvdW5kUmVjdGFuZ2xlSW50ZXJzZWN0TGluZSggeCwgeSwgY2VudGVyWCwgY2VudGVyWSwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgd2lkdGgsIGhlaWdodCxcbiAgICAgICAgY3lNYXRoLmdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpLCBwYWRkaW5nXG4gICAgICApO1xuICAgIH0sXG4gICAgXCJjb21wbGV4XCI6IGZ1bmN0aW9uKCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nICkge1xuICAgICAgdmFyIHBvaW50cyA9ICQkLnNiZ24uZ2VuZXJhdGVDb21wbGV4U2hhcGVQb2ludHMoICQkLnNiZ24uZ2V0RGVmYXVsdENvbXBsZXhDb3JuZXJMZW5ndGgoKSwgd2lkdGgsIGhlaWdodCApO1xuICAgICAgcmV0dXJuIGN5TWF0aC5wb2x5Z29uSW50ZXJzZWN0TGluZShcbiAgICAgICAgeCwgeSwgcG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIsIHBhZGRpbmdcbiAgICAgICk7XG4gICAgfSxcbiAgICBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI6IGZ1bmN0aW9uKCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nICkge1xuICAgICAgcmV0dXJuIGN5QmFzZU5vZGVTaGFwZXNbXCJib3R0b21yb3VuZHJlY3RhbmdsZVwiXS5pbnRlcnNlY3RMaW5lKCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nICk7XG4gICAgfSxcbiAgICBcInNvdXJjZSBhbmQgc2lua1wiOiBmdW5jdGlvbiggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApIHtcbiAgICAgIHJldHVybiBjeUJhc2VOb2RlU2hhcGVzW1wiZWxsaXBzZVwiXS5pbnRlcnNlY3RMaW5lKCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nICk7XG4gICAgfSxcbiAgICBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjogZnVuY3Rpb24oIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcgKSB7XG4gICAgICB2YXIgcG9pbnRzID0gJCQuc2Jnbi5nZW5lcmF0ZUJpb2xvZ2ljYWxBY3Rpdml0eVBvaW50cygpO1xuICAgICAgcmV0dXJuIGN5TWF0aC5wb2x5Z29uSW50ZXJzZWN0TGluZShcbiAgICAgICAgeCwgeSwgcG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAvIDIsIGhlaWdodCAvIDIsIHBhZGRpbmdcbiAgICAgICk7XG4gICAgfSxcbiAgICBcImNvbXBhcnRtZW50XCI6IGZ1bmN0aW9uKCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nICkge1xuICAgICAgcmV0dXJuIGN5QmFzZU5vZGVTaGFwZXNbXCJiYXJyZWxcIl0uaW50ZXJzZWN0TGluZSggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApO1xuICAgIH0sXG4gICAgXCJvbGRDb21wYXJ0bWVudFwiOiBmdW5jdGlvbiggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApIHtcbiAgICAgIHJldHVybiBjeU1hdGgucm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKFxuICAgICAgICB4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAkJC5zYmduLnBsYWluQ2hlY2tQb2ludCA9IHtcbiAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiBmdW5jdGlvbiggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApIHtcblxuICAgICAgdmFyIHBvaW50cyA9IGN5TWF0aC5nZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoIDQsIDAgKTtcbiAgICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gICAgLy92YXIgY29ybmVyUmFkaXVzID0gJCQubWF0aC5nZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIHZhciBjb3JuZXJSYWRpdXMgPSBNYXRoLm1pbihoYWxmV2lkdGgsIGhhbGZIZWlnaHQpO1xuICAgICAgLy92YXIgY29ybmVyUmFkaXVzID0gbWF0aC5nZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyggd2lkdGgsIGhlaWdodCApO1xuICAgICAgdmFyIGRpYW0gPSBjb3JuZXJSYWRpdXMgKiAyO1xuXG4gICAgICAvLyBDaGVjayBoQm94XG4gICAgICBpZiggY3lNYXRoLnBvaW50SW5zaWRlUG9seWdvbiggeCwgeSwgcG9pbnRzLFxuICAgICAgICBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0IC0gZGlhbSwgWzAsIC0xXSwgcGFkZGluZyApICl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB2Qm94XG4gICAgICBpZiggY3lNYXRoLnBvaW50SW5zaWRlUG9seWdvbiggeCwgeSwgcG9pbnRzLFxuICAgICAgICBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCAtIGRpYW0sIGhlaWdodCwgWzAsIC0xXSwgcGFkZGluZyApICl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0b3AgbGVmdCBxdWFydGVyIGNpcmNsZVxuICAgICAgaWYoIGN5TWF0aC5jaGVja0luRWxsaXBzZSggeCwgeSxcbiAgICAgICAgZGlhbSwgZGlhbSxcbiAgICAgICAgY2VudGVyWCAtIHdpZHRoIC8gMiArIGNvcm5lclJhZGl1cyxcbiAgICAgICAgY2VudGVyWSAtIGhlaWdodCAvIDIgKyBjb3JuZXJSYWRpdXMsXG4gICAgICAgIHBhZGRpbmcgKSApe1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0b3AgcmlnaHQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmKCBjeU1hdGguY2hlY2tJbkVsbGlwc2UoIHgsIHksXG4gICAgICAgIGRpYW0sIGRpYW0sXG4gICAgICAgIGNlbnRlclggKyB3aWR0aCAvIDIgLSBjb3JuZXJSYWRpdXMsXG4gICAgICAgIGNlbnRlclkgLSBoZWlnaHQgLyAyICsgY29ybmVyUmFkaXVzLFxuICAgICAgICBwYWRkaW5nICkgKXtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYm90dG9tIHJpZ2h0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiggY3lNYXRoLmNoZWNrSW5FbGxpcHNlKCB4LCB5LFxuICAgICAgICBkaWFtLCBkaWFtLFxuICAgICAgICBjZW50ZXJYICsgd2lkdGggLyAyIC0gY29ybmVyUmFkaXVzLFxuICAgICAgICBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cyxcbiAgICAgICAgcGFkZGluZyApICl7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGJvdHRvbSBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiggY3lNYXRoLmNoZWNrSW5FbGxpcHNlKCB4LCB5LFxuICAgICAgICBkaWFtLCBkaWFtLFxuICAgICAgICBjZW50ZXJYIC0gd2lkdGggLyAyICsgY29ybmVyUmFkaXVzLFxuICAgICAgICBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cyxcbiAgICAgICAgcGFkZGluZyApICl7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAvL3JldHVybiBjeUJhc2VOb2RlU2hhcGVzW1wiZWxsaXBzZVwiXS5jaGVja1BvaW50KCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICk7XG4gICAgfSxcbiAgICBcIm1hY3JvbW9sZWN1bGVcIjogZnVuY3Rpb24oIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKSB7XG4gICAgICByZXR1cm4gY3lCYXNlTm9kZVNoYXBlc1tcInJvdW5kcmVjdGFuZ2xlXCJdLmNoZWNrUG9pbnQoIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKTtcbiAgICB9LFxuICAgIFwiY29tcGxleFwiOiBmdW5jdGlvbiggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApIHtcbiAgICAgIHZhciBwb2ludHMgPSAkJC5zYmduLmdlbmVyYXRlQ29tcGxleFNoYXBlUG9pbnRzKCAkJC5zYmduLmdldERlZmF1bHRDb21wbGV4Q29ybmVyTGVuZ3RoKCksIHdpZHRoLCBoZWlnaHQgKTtcbiAgICAgIHJldHVybiBjeU1hdGgucG9pbnRJbnNpZGVQb2x5Z29uKFxuICAgICAgICB4LCB5LCBwb2ludHMsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIFswLCAtMV0sIHBhZGRpbmcpO1xuICAgIH0sXG4gICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiBmdW5jdGlvbiggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApIHtcbiAgICAgIHJldHVybiBjeUJhc2VOb2RlU2hhcGVzW1wiYm90dG9tcm91bmRyZWN0YW5nbGVcIl0uY2hlY2tQb2ludCggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApO1xuICAgIH0sXG4gICAgXCJzb3VyY2UgYW5kIHNpbmtcIjogZnVuY3Rpb24oIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKSB7XG4gICAgICByZXR1cm4gY3lCYXNlTm9kZVNoYXBlc1tcImVsbGlwc2VcIl0uY2hlY2tQb2ludCggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApO1xuICAgIH0sXG4gICAgXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI6IGZ1bmN0aW9uKCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICkge1xuICAgICAgcmV0dXJuIGN5QmFzZU5vZGVTaGFwZXNbXCJyZWN0YW5nbGVcIl0uY2hlY2tQb2ludCggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApO1xuICAgIH0sXG4gICAgXCJjb21wYXJ0bWVudFwiOiBmdW5jdGlvbiggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApIHtcbiAgICAgIHJldHVybiBjeUJhc2VOb2RlU2hhcGVzW1wiYmFycmVsXCJdLmNoZWNrUG9pbnQoIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKTtcbiAgICB9LFxuICAgIFwib2xkQ29tcGFydG1lbnRcIjogZnVuY3Rpb24oIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKSB7XG4gICAgICByZXR1cm4gY3lCYXNlTm9kZVNoYXBlc1tcInJvdW5kcmVjdGFuZ2xlXCJdLmNoZWNrUG9pbnQoIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKTtcbiAgICB9XG4gIH07XG5cbiAgJCQuc2Jnbi5jbG9uZU1hcmtlciA9IHtcbiAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiBmdW5jdGlvbiAoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGNsb25lTWFya2VyLCBpc011bHRpbWVyLCBvcGFjaXR5KSB7XG4gICAgICBpZiAoY2xvbmVNYXJrZXIgIT0gbnVsbCkge1xuICAgICAgICB2YXIgY29ybmVyUmFkaXVzID0gTWF0aC5taW4od2lkdGggLyAyLCBoZWlnaHQgLyAyKTtcblxuICAgICAgICB2YXIgZmlyc3RDaXJjbGVDZW50ZXJYID0gY2VudGVyWCAtIHdpZHRoIC8gMiArIGNvcm5lclJhZGl1cztcbiAgICAgICAgdmFyIGZpcnN0Q2lyY2xlQ2VudGVyWSA9IGNlbnRlclk7XG4gICAgICAgIHZhciBzZWNvbmRDaXJjbGVDZW50ZXJYID0gY2VudGVyWCArIHdpZHRoIC8gMiAtIGNvcm5lclJhZGl1cztcbiAgICAgICAgdmFyIHNlY29uZENpcmNsZUNlbnRlclkgPSBjZW50ZXJZO1xuICAgICAgICB2YXIgYm90dG9tQ2lyY2xlQ2VudGVyWCA9IGNlbnRlclg7XG4gICAgICAgIHZhciBib3R0b21DaXJjbGVDZW50ZXJZID0gY2VudGVyWSArIGhlaWdodC8yIC0gY29ybmVyUmFkaXVzO1xuXG4gICAgICAgIGlmICh3aWR0aCA8IGhlaWdodCkge1xuICAgICAgICAgIHNpbXBsZUNoZW1pY2FsTGVmdENsb25lKGNvbnRleHQsIGJvdHRvbUNpcmNsZUNlbnRlclgsIGJvdHRvbUNpcmNsZUNlbnRlclksXG4gICAgICAgICAgICAgIDIgKiBjb3JuZXJSYWRpdXMsIDIgKiBjb3JuZXJSYWRpdXMsIGNsb25lTWFya2VyLCBvcGFjaXR5KTtcbiAgICAgICAgICBzaW1wbGVDaGVtaWNhbFJpZ2h0Q2xvbmUoY29udGV4dCwgYm90dG9tQ2lyY2xlQ2VudGVyWCwgYm90dG9tQ2lyY2xlQ2VudGVyWSxcbiAgICAgICAgICAgICAgMiAqIGNvcm5lclJhZGl1cywgMiAqIGNvcm5lclJhZGl1cywgY2xvbmVNYXJrZXIsIG9wYWNpdHkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHNpbXBsZUNoZW1pY2FsTGVmdENsb25lKGNvbnRleHQsIGZpcnN0Q2lyY2xlQ2VudGVyWCwgZmlyc3RDaXJjbGVDZW50ZXJZLFxuICAgICAgICAgICAgICAyICogY29ybmVyUmFkaXVzLCAyICogY29ybmVyUmFkaXVzLCBjbG9uZU1hcmtlciwgb3BhY2l0eSk7XG4gICAgICAgICAgc2ltcGxlQ2hlbWljYWxSaWdodENsb25lKGNvbnRleHQsIHNlY29uZENpcmNsZUNlbnRlclgsIHNlY29uZENpcmNsZUNlbnRlclksXG4gICAgICAgICAgICAgIDIgKiBjb3JuZXJSYWRpdXMsIDIgKiBjb3JuZXJSYWRpdXMsIGNsb25lTWFya2VyLCBvcGFjaXR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvbGRTdHlsZSA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICQkLnNiZ24uY29sb3JzLmNsb25lO1xuICAgICAgICB2YXIgb2xkR2xvYmFsQWxwaGEgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcblxuICAgICAgICB2YXIgcmVjUG9pbnRzID0gY3lNYXRoLmdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKTtcbiAgICAgICAgdmFyIGNsb25lWCA9IGNlbnRlclg7XG4gICAgICAgIHZhciBjbG9uZVkgPSBjZW50ZXJZICsgMyAvIDQgKiBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHZhciBjbG9uZVdpZHRoID0gd2lkdGggLSAyICogY29ybmVyUmFkaXVzO1xuICAgICAgICB2YXIgY2xvbmVIZWlnaHQgPSBjb3JuZXJSYWRpdXMgLyAyO1xuXG4gICAgICAgIGRyYXdQb2x5Z29uUGF0aChjb250ZXh0LCBjbG9uZVgsIGNsb25lWSwgY2xvbmVXaWR0aCwgY2xvbmVIZWlnaHQsIHJlY1BvaW50cyk7XG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IG9sZFN0eWxlO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb2xkR2xvYmFsQWxwaGE7XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI6IGZ1bmN0aW9uIChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgY2xvbmVNYXJrZXIsIGlzTXVsdGltZXIsIG9wYWNpdHkpIHtcbiAgICAgIGlmIChjbG9uZU1hcmtlciAhPSBudWxsKSB7XG4gICAgICAgIHZhciBjbG9uZVdpZHRoID0gd2lkdGg7XG4gICAgICAgIHZhciBjbG9uZUhlaWdodCA9IGhlaWdodCAvIDQ7XG4gICAgICAgIHZhciBjbG9uZVggPSBjZW50ZXJYO1xuICAgICAgICB2YXIgY2xvbmVZID0gY2VudGVyWSArIDMgKiBoZWlnaHQgLyA4O1xuXG4gICAgICAgIHZhciBvbGRTdHlsZSA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICQkLnNiZ24uY29sb3JzLmNsb25lO1xuICAgICAgICB2YXIgb2xkR2xvYmFsQWxwaGEgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcblxuICAgICAgICB2YXIgY29ybmVyUmFkaXVzID0gY3lNYXRoLmdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgICQkLnNiZ24uZHJhd051Y0FjaWRGZWF0dXJlMihjb250ZXh0LCBjbG9uZVgsIGNsb25lWSxcbiAgICAgICAgICAgICAgICBjbG9uZVdpZHRoLCBjbG9uZUhlaWdodCwgY29ybmVyUmFkaXVzKTtcblxuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IG9sZFN0eWxlO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb2xkR2xvYmFsQWxwaGE7XG4gICAgICB9XG4gICAgfSxcbiAgICBcIm1hY3JvbW9sZWN1bGVcIjogZnVuY3Rpb24gKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBjbG9uZU1hcmtlciwgaXNNdWx0aW1lciwgb3BhY2l0eSkge1xuICAgICAgJCQuc2Jnbi5jbG9uZU1hcmtlcltcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCJdKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGNsb25lTWFya2VyLCBpc011bHRpbWVyLCBvcGFjaXR5KTtcbiAgICB9LFxuICAgIFwiY29tcGxleFwiOiBmdW5jdGlvbiAoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGNsb25lTWFya2VyLCBpc011bHRpbWVyLCBvcGFjaXR5KSB7XG4gICAgICBpZiAoY2xvbmVNYXJrZXIgIT0gbnVsbCkge1xuICAgICAgICB2YXIgY29ybmVyTGVuZ3RoID0gJCQuc2Jnbi5nZXREZWZhdWx0Q29tcGxleENvcm5lckxlbmd0aCgpO1xuICAgICAgICB2YXIgY3BYID0gKHdpZHRoID49IDUwKSA/IGNvcm5lckxlbmd0aCAvIHdpZHRoIDogY29ybmVyTGVuZ3RoIC8gNTA7XG4gICAgICAgIHZhciBjcFkgPSAoaGVpZ2h0ID49IDUwKSA/IGNvcm5lckxlbmd0aCAvIGhlaWdodCA6IGNvcm5lckxlbmd0aCAvIDUwO1xuICAgICAgICB2YXIgY2xvbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgICB2YXIgY2xvbmVIZWlnaHQgPSBoZWlnaHQgKiBjcFkgLyAyO1xuICAgICAgICB2YXIgY2xvbmVYID0gY2VudGVyWDtcbiAgICAgICAgdmFyIGNsb25lWSA9IGNlbnRlclkgKyBoZWlnaHQgLyAyIC0gY2xvbmVIZWlnaHQgLyAyO1xuXG4gICAgICAgIHZhciBtYXJrZXJQb2ludHMgPSBbLTEsIC0xLCAxLCAtMSwgMSAtIGNwWCwgMSwgLTEgKyBjcFgsIDFdO1xuXG4gICAgICAgIHZhciBvbGRTdHlsZSA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICQkLnNiZ24uY29sb3JzLmNsb25lO1xuICAgICAgICB2YXIgb2xkR2xvYmFsQWxwaGEgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuICAgICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcblxuICAgICAgICBkcmF3UG9seWdvblBhdGgoY29udGV4dCxcbiAgICAgICAgICAgICAgICBjbG9uZVgsIGNsb25lWSxcbiAgICAgICAgICAgICAgICBjbG9uZVdpZHRoLCBjbG9uZUhlaWdodCwgbWFya2VyUG9pbnRzKTtcbiAgICAgICAgY29udGV4dC5maWxsKCk7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBvbGRTdHlsZTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9sZEdsb2JhbEFscGhhO1xuXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gICQkLnNiZ24uY2xvc2VzdEludGVyc2VjdGlvblBvaW50ID0gZnVuY3Rpb24gKHBvaW50LCBpbnRlcnNlY3Rpb25zKSB7XG4gICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoIDw9IDApXG4gICAgICByZXR1cm4gW107XG5cbiAgICB2YXIgY2xvc2VzdEludGVyc2VjdGlvbiA9IFtdO1xuICAgIHZhciBtaW5EaXN0YW5jZSA9IE51bWJlci5NQVhfVkFMVUU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGludGVyc2VjdGlvbnMubGVuZ3RoOyBpID0gaSArIDIpIHtcbiAgICAgIHZhciBjaGVja1BvaW50ID0gW2ludGVyc2VjdGlvbnNbaV0sIGludGVyc2VjdGlvbnNbaSArIDFdXTtcbiAgICAgIHZhciBkaXN0YW5jZSA9IGN5TWF0aC5jYWxjdWxhdGVEaXN0YW5jZShwb2ludCwgY2hlY2tQb2ludCk7XG5cbiAgICAgIGlmIChkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgIGNsb3Nlc3RJbnRlcnNlY3Rpb24gPSBjaGVja1BvaW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjbG9zZXN0SW50ZXJzZWN0aW9uO1xuICB9O1xuXG4gICQkLnNiZ24ubnVjbGVpY0FjaWRJbnRlcnNlY3Rpb25MaW5lID0gZnVuY3Rpb24gKHgsIHksIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzLCBwYWRkaW5nKSB7XG4gICAgLy8gdmFyIG5vZGVYID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi54O1xuICAgIC8vIHZhciBub2RlWSA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueTtcbiAgICAvLyB2YXIgd2lkdGggPSBub2RlLndpZHRoKCk7XG4gICAgLy8gdmFyIGhlaWdodCA9IG5vZGUuaGVpZ2h0KCk7XG4gICAgLy8gdmFyIHBhZGRpbmcgPSBwYXJzZUludChub2RlLmNzcygnYm9yZGVyLXdpZHRoJykpIC8gMjtcblxuICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuXG4gICAgdmFyIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG5cbiAgICAvLyBUb3Agc2VnbWVudCwgbGVmdCB0byByaWdodFxuICAgIHtcbiAgICAgIHZhciB0b3BTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCAtIHBhZGRpbmc7XG4gICAgICB2YXIgdG9wU3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0IC0gcGFkZGluZztcbiAgICAgIHZhciB0b3BFbmRYID0gbm9kZVggKyBoYWxmV2lkdGggKyBwYWRkaW5nO1xuICAgICAgdmFyIHRvcEVuZFkgPSB0b3BTdGFydFk7XG5cbiAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBjeU1hdGguZmluaXRlTGluZXNJbnRlcnNlY3QoXG4gICAgICAgICAgICAgIHgsIHksIG5vZGVYLCBub2RlWSwgdG9wU3RhcnRYLCB0b3BTdGFydFksIHRvcEVuZFgsIHRvcEVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSaWdodCBzZWdtZW50LCB0b3AgdG8gYm90dG9tXG4gICAge1xuICAgICAgdmFyIHJpZ2h0U3RhcnRYID0gbm9kZVggKyBoYWxmV2lkdGggKyBwYWRkaW5nO1xuICAgICAgdmFyIHJpZ2h0U3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0IC0gcGFkZGluZztcbiAgICAgIHZhciByaWdodEVuZFggPSByaWdodFN0YXJ0WDtcbiAgICAgIHZhciByaWdodEVuZFkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuXG4gICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gY3lNYXRoLmZpbml0ZUxpbmVzSW50ZXJzZWN0KFxuICAgICAgICAgICAgICB4LCB5LCBub2RlWCwgbm9kZVksIHJpZ2h0U3RhcnRYLCByaWdodFN0YXJ0WSwgcmlnaHRFbmRYLCByaWdodEVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCb3R0b20gc2VnbWVudCwgbGVmdCB0byByaWdodFxuICAgIHtcbiAgICAgIHZhciBib3R0b21TdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgICB2YXIgYm90dG9tU3RhcnRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0ICsgcGFkZGluZztcbiAgICAgIHZhciBib3R0b21FbmRYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgICAgdmFyIGJvdHRvbUVuZFkgPSBib3R0b21TdGFydFk7XG5cbiAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBjeU1hdGguZmluaXRlTGluZXNJbnRlcnNlY3QoXG4gICAgICAgICAgICAgIHgsIHksIG5vZGVYLCBub2RlWSwgYm90dG9tU3RhcnRYLCBib3R0b21TdGFydFksIGJvdHRvbUVuZFgsIGJvdHRvbUVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMZWZ0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgICB7XG4gICAgICB2YXIgbGVmdFN0YXJ0WCA9IG5vZGVYIC0gaGFsZldpZHRoIC0gcGFkZGluZztcbiAgICAgIHZhciBsZWZ0U3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0IC0gcGFkZGluZztcbiAgICAgIHZhciBsZWZ0RW5kWCA9IGxlZnRTdGFydFg7XG4gICAgICB2YXIgbGVmdEVuZFkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuXG4gICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gY3lNYXRoLmZpbml0ZUxpbmVzSW50ZXJzZWN0KFxuICAgICAgICAgICAgICB4LCB5LCBub2RlWCwgbm9kZVksIGxlZnRTdGFydFgsIGxlZnRTdGFydFksIGxlZnRFbmRYLCBsZWZ0RW5kWSwgZmFsc2UpO1xuXG4gICAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGludGVyc2VjdGlvbnMgd2l0aCBhcmMgc2VnbWVudHMsIHdlIGhhdmUgb25seSB0d28gYXJjcyBmb3JcbiAgICAvL251Y2xlaWMgYWNpZCBmZWF0dXJlc1xuICAgIHZhciBhcmNJbnRlcnNlY3Rpb25zO1xuXG4gICAgLy8gQm90dG9tIFJpZ2h0XG4gICAge1xuICAgICAgdmFyIGJvdHRvbVJpZ2h0Q2VudGVyWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzO1xuICAgICAgdmFyIGJvdHRvbVJpZ2h0Q2VudGVyWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1c1xuICAgICAgYXJjSW50ZXJzZWN0aW9ucyA9IGN5TWF0aC5pbnRlcnNlY3RMaW5lQ2lyY2xlKFxuICAgICAgICAgICAgICB4LCB5LCBub2RlWCwgbm9kZVksXG4gICAgICAgICAgICAgIGJvdHRvbVJpZ2h0Q2VudGVyWCwgYm90dG9tUmlnaHRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBpbnRlcnNlY3Rpb24gaXMgb24gdGhlIGRlc2lyZWQgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG4gICAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPj0gYm90dG9tUmlnaHRDZW50ZXJYXG4gICAgICAgICAgICAgICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPj0gYm90dG9tUmlnaHRDZW50ZXJZKSB7XG4gICAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQm90dG9tIExlZnRcbiAgICB7XG4gICAgICB2YXIgYm90dG9tTGVmdENlbnRlclggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBib3R0b21MZWZ0Q2VudGVyWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1c1xuICAgICAgYXJjSW50ZXJzZWN0aW9ucyA9IGN5TWF0aC5pbnRlcnNlY3RMaW5lQ2lyY2xlKFxuICAgICAgICAgICAgICB4LCB5LCBub2RlWCwgbm9kZVksXG4gICAgICAgICAgICAgIGJvdHRvbUxlZnRDZW50ZXJYLCBib3R0b21MZWZ0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgICAgaWYgKGFyY0ludGVyc2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzBdIDw9IGJvdHRvbUxlZnRDZW50ZXJYXG4gICAgICAgICAgICAgICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPj0gYm90dG9tTGVmdENlbnRlclkpIHtcbiAgICAgICAgcmV0dXJuIFthcmNJbnRlcnNlY3Rpb25zWzBdLCBhcmNJbnRlcnNlY3Rpb25zWzFdXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtdOyAvLyBpZiBub3RoaW5nXG4gIH07XG5cbiAgLy90aGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBpbnRlcnNlY3Rpb25zIG9mIGFueSBsaW5lIHdpdGggdGhlIHVwcGVyIGhhbGYgb2YgcGVydHVyYmluZyBhZ2VudFxuICAkJC5zYmduLnBlcnR1cmJpbmdBZ2VudEludGVyc2VjdExpbmUgPSBmdW5jdGlvbiAoXG4gICAgICAgICAgeDEsIHkxLCB4MiwgeTIsIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZykge1xuXG4gICAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG5cbiAgICAvLyBDaGVjayBpbnRlcnNlY3Rpb25zIHdpdGggc3RyYWlnaHQgbGluZSBzZWdtZW50c1xuICAgIHZhciBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gW107XG5cbiAgICAvLyBUb3Agc2VnbWVudCwgbGVmdCB0byByaWdodFxuICAgIHtcbiAgICAgIHZhciB0b3BTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCAtIHBhZGRpbmc7XG4gICAgICB2YXIgdG9wU3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0IC0gcGFkZGluZztcbiAgICAgIHZhciB0b3BFbmRYID0gbm9kZVggKyBoYWxmV2lkdGggKyBwYWRkaW5nO1xuICAgICAgdmFyIHRvcEVuZFkgPSB0b3BTdGFydFk7XG5cbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBjeU1hdGguZmluaXRlTGluZXNJbnRlcnNlY3QoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCB0b3BTdGFydFgsIHRvcFN0YXJ0WSwgdG9wRW5kWCwgdG9wRW5kWSwgZmFsc2UpO1xuXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGludGVyc2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmlnaHQgc2VnbWVudCwgdG9wIHRvIGJvdHRvbVxuICAgIHtcbiAgICAgIHZhciByaWdodFN0YXJ0WCA9IG5vZGVYICsgaGFsZldpZHRoICsgcGFkZGluZztcbiAgICAgIHZhciByaWdodFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCAtIHBhZGRpbmc7XG4gICAgICB2YXIgcmlnaHRFbmRYID0gcmlnaHRTdGFydFggLSBoYWxmV2lkdGgvMjtcbiAgICAgIHZhciByaWdodEVuZFkgPSBub2RlWSArIHBhZGRpbmc7XG5cbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBjeU1hdGguZmluaXRlTGluZXNJbnRlcnNlY3QoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCByaWdodFN0YXJ0WCwgcmlnaHRTdGFydFksIHJpZ2h0RW5kWCwgcmlnaHRFbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChpbnRlcnNlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5jb25jYXQoaW50ZXJzZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMZWZ0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgICB7XG4gICAgICB2YXIgbGVmdFN0YXJ0WCA9IG5vZGVYIC0gaGFsZldpZHRoIC0gcGFkZGluZztcbiAgICAgIHZhciBsZWZ0U3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0IC0gcGFkZGluZztcbiAgICAgIHZhciBsZWZ0RW5kWCA9IGxlZnRTdGFydFggKyBoYWxmV2lkdGgvMjtcbiAgICAgIHZhciBsZWZ0RW5kWSA9IG5vZGVZICsgcGFkZGluZztcblxuICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGN5TWF0aC5maW5pdGVMaW5lc0ludGVyc2VjdChcbiAgICAgICAgICAgICAgeDEsIHkxLCB4MiwgeTIsIGxlZnRTdGFydFgsIGxlZnRTdGFydFksIGxlZnRFbmRYLCBsZWZ0RW5kWSwgZmFsc2UpO1xuXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGludGVyc2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gIH07XG5cbiAgLy90aGlzIGZ1bmN0aW9uIGdpdmVzIHRoZSBpbnRlcnNlY3Rpb25zIG9mIGFueSBsaW5lIHdpdGggYSByb3VuZCByZWN0YW5nbGVcbiAgJCQuc2Jnbi5yb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUgPSBmdW5jdGlvbiAoXG4gICAgICAgICAgeDEsIHkxLCB4MiwgeTIsIG5vZGVYLCBub2RlWSwgd2lkdGgsIGhlaWdodCwgY29ybmVyUmFkaXVzLCBwYWRkaW5nKSB7XG5cbiAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcblxuICAgIC8vIENoZWNrIGludGVyc2VjdGlvbnMgd2l0aCBzdHJhaWdodCBsaW5lIHNlZ21lbnRzXG4gICAgdmFyIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBbXTtcbiAgICAvLyBUb3Agc2VnbWVudCwgbGVmdCB0byByaWdodFxuICAgIHtcbiAgICAgIHZhciB0b3BTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgICB2YXIgdG9wU3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0IC0gcGFkZGluZztcbiAgICAgIHZhciB0b3BFbmRYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgICAgdmFyIHRvcEVuZFkgPSB0b3BTdGFydFk7XG5cbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBjeU1hdGguZmluaXRlTGluZXNJbnRlcnNlY3QoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCB0b3BTdGFydFgsIHRvcFN0YXJ0WSwgdG9wRW5kWCwgdG9wRW5kWSwgZmFsc2UpO1xuXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGludGVyc2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmlnaHQgc2VnbWVudCwgdG9wIHRvIGJvdHRvbVxuICAgIHtcbiAgICAgIHZhciByaWdodFN0YXJ0WCA9IG5vZGVYICsgaGFsZldpZHRoICsgcGFkZGluZztcbiAgICAgIHZhciByaWdodFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgICB2YXIgcmlnaHRFbmRYID0gcmlnaHRTdGFydFg7XG4gICAgICB2YXIgcmlnaHRFbmRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcblxuICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGN5TWF0aC5maW5pdGVMaW5lc0ludGVyc2VjdChcbiAgICAgICAgICAgICAgeDEsIHkxLCB4MiwgeTIsIHJpZ2h0U3RhcnRYLCByaWdodFN0YXJ0WSwgcmlnaHRFbmRYLCByaWdodEVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmNvbmNhdChpbnRlcnNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJvdHRvbSBzZWdtZW50LCBsZWZ0IHRvIHJpZ2h0XG4gICAge1xuICAgICAgdmFyIGJvdHRvbVN0YXJ0WCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzIC0gcGFkZGluZztcbiAgICAgIHZhciBib3R0b21TdGFydFkgPSBub2RlWSArIGhhbGZIZWlnaHQgKyBwYWRkaW5nO1xuICAgICAgdmFyIGJvdHRvbUVuZFggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG4gICAgICB2YXIgYm90dG9tRW5kWSA9IGJvdHRvbVN0YXJ0WTtcblxuICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGN5TWF0aC5maW5pdGVMaW5lc0ludGVyc2VjdChcbiAgICAgICAgICAgICAgeDEsIHkxLCB4MiwgeTIsIGJvdHRvbVN0YXJ0WCwgYm90dG9tU3RhcnRZLCBib3R0b21FbmRYLCBib3R0b21FbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChpbnRlcnNlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5jb25jYXQoaW50ZXJzZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMZWZ0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgICB7XG4gICAgICB2YXIgbGVmdFN0YXJ0WCA9IG5vZGVYIC0gaGFsZldpZHRoIC0gcGFkZGluZztcbiAgICAgIHZhciBsZWZ0U3RhcnRZID0gbm9kZVkgLSBoYWxmSGVpZ2h0ICsgY29ybmVyUmFkaXVzIC0gcGFkZGluZztcbiAgICAgIHZhciBsZWZ0RW5kWCA9IGxlZnRTdGFydFg7XG4gICAgICB2YXIgbGVmdEVuZFkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuXG4gICAgICB2YXIgaW50ZXJzZWN0aW9uID0gY3lNYXRoLmZpbml0ZUxpbmVzSW50ZXJzZWN0KFxuICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MiwgbGVmdFN0YXJ0WCwgbGVmdFN0YXJ0WSwgbGVmdEVuZFgsIGxlZnRFbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChpbnRlcnNlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5jb25jYXQoaW50ZXJzZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpbnRlcnNlY3Rpb25zIHdpdGggYXJjIHNlZ21lbnRzXG4gICAgdmFyIGFyY0ludGVyc2VjdGlvbnM7XG5cbiAgICAvLyBUb3AgTGVmdFxuICAgIHtcbiAgICAgIHZhciB0b3BMZWZ0Q2VudGVyWCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzO1xuICAgICAgdmFyIHRvcExlZnRDZW50ZXJZID0gbm9kZVkgLSBoYWxmSGVpZ2h0ICsgY29ybmVyUmFkaXVzXG4gICAgICBhcmNJbnRlcnNlY3Rpb25zID0gY3lNYXRoLmludGVyc2VjdExpbmVDaXJjbGUoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLFxuICAgICAgICAgICAgICB0b3BMZWZ0Q2VudGVyWCwgdG9wTGVmdENlbnRlclksIGNvcm5lclJhZGl1cyArIHBhZGRpbmcpO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA8PSB0b3BMZWZ0Q2VudGVyWFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzFdIDw9IHRvcExlZnRDZW50ZXJZKSB7XG4gICAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmNvbmNhdChhcmNJbnRlcnNlY3Rpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUb3AgUmlnaHRcbiAgICB7XG4gICAgICB2YXIgdG9wUmlnaHRDZW50ZXJYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgdG9wUmlnaHRDZW50ZXJZID0gbm9kZVkgLSBoYWxmSGVpZ2h0ICsgY29ybmVyUmFkaXVzXG4gICAgICBhcmNJbnRlcnNlY3Rpb25zID0gY3lNYXRoLmludGVyc2VjdExpbmVDaXJjbGUoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLFxuICAgICAgICAgICAgICB0b3BSaWdodENlbnRlclgsIHRvcFJpZ2h0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgICAgaWYgKGFyY0ludGVyc2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzBdID49IHRvcFJpZ2h0Q2VudGVyWFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzFdIDw9IHRvcFJpZ2h0Q2VudGVyWSkge1xuICAgICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5jb25jYXQoYXJjSW50ZXJzZWN0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQm90dG9tIFJpZ2h0XG4gICAge1xuICAgICAgdmFyIGJvdHRvbVJpZ2h0Q2VudGVyWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzO1xuICAgICAgdmFyIGJvdHRvbVJpZ2h0Q2VudGVyWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1c1xuICAgICAgYXJjSW50ZXJzZWN0aW9ucyA9IGN5TWF0aC5pbnRlcnNlY3RMaW5lQ2lyY2xlKFxuICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MixcbiAgICAgICAgICAgICAgYm90dG9tUmlnaHRDZW50ZXJYLCBib3R0b21SaWdodENlbnRlclksIGNvcm5lclJhZGl1cyArIHBhZGRpbmcpO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA+PSBib3R0b21SaWdodENlbnRlclhcbiAgICAgICAgICAgICAgJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA+PSBib3R0b21SaWdodENlbnRlclkpIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGFyY0ludGVyc2VjdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJvdHRvbSBMZWZ0XG4gICAge1xuICAgICAgdmFyIGJvdHRvbUxlZnRDZW50ZXJYID0gbm9kZVggLSBoYWxmV2lkdGggKyBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgYm90dG9tTGVmdENlbnRlclkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXNcbiAgICAgIGFyY0ludGVyc2VjdGlvbnMgPSBjeU1hdGguaW50ZXJzZWN0TGluZUNpcmNsZShcbiAgICAgICAgICAgICAgeDEsIHkxLCB4MiwgeTIsXG4gICAgICAgICAgICAgIGJvdHRvbUxlZnRDZW50ZXJYLCBib3R0b21MZWZ0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgICAgaWYgKGFyY0ludGVyc2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzBdIDw9IGJvdHRvbUxlZnRDZW50ZXJYXG4gICAgICAgICAgICAgICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPj0gYm90dG9tTGVmdENlbnRlclkpIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGFyY0ludGVyc2VjdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICByZXR1cm4gW107IC8vIGlmIG5vdGhpbmdcbiAgfTtcblxuICAkJC5zYmduLmludGVyc2VjdExpbmVFbGxpcHNlID0gZnVuY3Rpb24gKFxuICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nKSB7XG5cbiAgICB2YXIgdyA9IHdpZHRoIC8gMiArIHBhZGRpbmc7XG4gICAgdmFyIGggPSBoZWlnaHQgLyAyICsgcGFkZGluZztcbiAgICB2YXIgYW4gPSBjZW50ZXJYO1xuICAgIHZhciBibiA9IGNlbnRlclk7XG5cbiAgICB2YXIgZCA9IFt4MiAtIHgxLCB5MiAtIHkxXTtcblxuICAgIHZhciBtID0gZFsxXSAvIGRbMF07XG4gICAgdmFyIG4gPSAtMSAqIG0gKiB4MiArIHkyO1xuICAgIHZhciBhID0gaCAqIGggKyB3ICogdyAqIG0gKiBtO1xuICAgIHZhciBiID0gLTIgKiBhbiAqIGggKiBoICsgMiAqIG0gKiBuICogdyAqIHcgLSAyICogYm4gKiBtICogdyAqIHc7XG4gICAgdmFyIGMgPSBhbiAqIGFuICogaCAqIGggKyBuICogbiAqIHcgKiB3IC0gMiAqIGJuICogdyAqIHcgKiBuICtcbiAgICAgICAgICAgIGJuICogYm4gKiB3ICogdyAtIGggKiBoICogdyAqIHc7XG5cbiAgICB2YXIgZGlzY3JpbWluYW50ID0gYiAqIGIgLSA0ICogYSAqIGM7XG5cbiAgICBpZiAoZGlzY3JpbWluYW50IDwgMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHZhciB0MSA9ICgtYiArIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvICgyICogYSk7XG4gICAgdmFyIHQyID0gKC1iIC0gTWF0aC5zcXJ0KGRpc2NyaW1pbmFudCkpIC8gKDIgKiBhKTtcblxuICAgIHZhciB4TWluID0gTWF0aC5taW4odDEsIHQyKTtcbiAgICB2YXIgeE1heCA9IE1hdGgubWF4KHQxLCB0Mik7XG5cbiAgICB2YXIgeU1pbiA9IG0gKiB4TWluIC0gbSAqIHgyICsgeTI7XG4gICAgdmFyIHlNYXggPSBtICogeE1heCAtIG0gKiB4MiArIHkyO1xuXG4gICAgcmV0dXJuIFt4TWluLCB5TWluLCB4TWF4LCB5TWF4XTtcbiAgfTtcblxuICAkJC5zYmduLmludGVyc2VjdExpbmVTdGF0ZUFuZEluZm9Cb3hlcyA9IGZ1bmN0aW9uIChub2RlLCB4LCB5KSB7XG4gICAgdmFyIGNlbnRlclggPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLng7XG4gICAgdmFyIGNlbnRlclkgPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLnk7XG4gICAgdmFyIHBhZGRpbmcgPSBwYXJzZUludChub2RlLmNzcygnYm9yZGVyLXdpZHRoJykpIC8gMjtcblxuICAgIHZhciBzdGF0ZUFuZEluZm9zID0gbm9kZS5fcHJpdmF0ZS5kYXRhLnN0YXRlc2FuZGluZm9zO1xuXG4gICAgdmFyIGludGVyc2VjdGlvbnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGVBbmRJbmZvcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN0YXRlID0gc3RhdGVBbmRJbmZvc1tpXTtcblxuICAgICAgaWYgKCAhc3RhdGUuaXNEaXNwbGF5ZWQgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5mb0JveFdpZHRoID0gc3RhdGUuYmJveC53O1xuICAgICAgdmFyIGluZm9Cb3hIZWlnaHQgPSBzdGF0ZS5iYm94Lmg7XG5cbiAgICAgIHZhciBjdXJySW50ZXJzZWN0aW9ucyA9IG51bGw7XG5cbiAgICAgIGlmICggc3RhdGUuY2xhenogPT0gXCJzdGF0ZSB2YXJpYWJsZVwiICkge1xuICAgICAgICB2YXIgY29vcmQgPSBjbGFzc2VzLlN0YXRlVmFyaWFibGUuZ2V0QWJzb2x1dGVDb29yZChzdGF0ZSwgbm9kZS5jeSgpKTtcbiAgICAgICAgY3VyckludGVyc2VjdGlvbnMgPSAkJC5zYmduLmludGVyc2VjdExpbmVFbGxpcHNlKHgsIHksIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgICAgICAgY29vcmQueCwgY29vcmQueSwgaW5mb0JveFdpZHRoLCBpbmZvQm94SGVpZ2h0LCBwYWRkaW5nKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCBzdGF0ZS5jbGF6eiA9PSBcInVuaXQgb2YgaW5mb3JtYXRpb25cIiApIHtcbiAgICAgICAgdmFyIGNvb3JkID0gY2xhc3Nlcy5Vbml0T2ZJbmZvcm1hdGlvbi5nZXRBYnNvbHV0ZUNvb3JkKHN0YXRlLCBub2RlLmN5KCkpO1xuICAgICAgICBpZiAobm9kZS5kYXRhKFwiY2xhc3NcIikgPT0gXCJCQSBtYWNyb21vbGVjdWxlXCIgfHwgbm9kZS5kYXRhKFwiY2xhc3NcIikgPT0gXCJCQSBudWNsZWljIGFjaWQgZmVhdHVyZVwiXG4gICAgICAgICAgICAgICAgfHwgbm9kZS5kYXRhKFwiY2xhc3NcIikgPT0gXCJCQSBjb21wbGV4XCIpe1xuICAgICAgICAgIGN1cnJJbnRlcnNlY3Rpb25zID0gJCQuc2Jnbi5yb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUoeCwgeSwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgICAgICAgICBjb29yZC54LCBjb29yZC55LCBpbmZvQm94V2lkdGgsIGluZm9Cb3hIZWlnaHQsIDUsIHBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUuZGF0YShcImNsYXNzXCIpID09IFwiQkEgdW5zcGVjaWZpZWQgZW50aXR5XCIpe1xuICAgICAgICAgIGN1cnJJbnRlcnNlY3Rpb25zID0gJCQuc2Jnbi5pbnRlcnNlY3RMaW5lRWxsaXBzZSh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgICAgICBjb29yZC54LCBjb29yZC55LCBpbmZvQm94V2lkdGgsIGluZm9Cb3hIZWlnaHQsIHBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUuZGF0YShcImNsYXNzXCIpID09IFwiQkEgc2ltcGxlIGNoZW1pY2FsXCIpe1xuICAgICAgICAgIGN1cnJJbnRlcnNlY3Rpb25zID0gY3lNYXRoLmludGVyc2VjdExpbmVDaXJjbGUoXG4gICAgICAgICAgICAgIHgsIHksXG4gICAgICAgICAgICAgIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgICAgIGNvb3JkLngsXG4gICAgICAgICAgICAgIGNvb3JkLnksXG4gICAgICAgICAgICAgIGluZm9Cb3hXaWR0aCAvIDQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vZGUuZGF0YShcImNsYXNzXCIpID09IFwiQkEgcGVydHVyYmluZyBhZ2VudFwiKXtcbiAgICAgICAgICBjdXJySW50ZXJzZWN0aW9ucyA9ICQkLnNiZ24ucGVydHVyYmluZ0FnZW50SW50ZXJzZWN0TGluZSh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgICAgICBjb29yZC54LCBjb29yZC55LCBpbmZvQm94V2lkdGgsIGluZm9Cb3hIZWlnaHQsIHBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGN1cnJJbnRlcnNlY3Rpb25zID0gJCQuc2Jnbi5yb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUoeCwgeSwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgICAgICAgICAgIGNvb3JkLngsIGNvb3JkLnksIGluZm9Cb3hXaWR0aCwgaW5mb0JveEhlaWdodCwgMCwgcGFkZGluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdGlvbnMuY29uY2F0KCBjdXJySW50ZXJzZWN0aW9ucyApO1xuXG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVyc2VjdGlvbnM7XG4gIH07XG5cbiAgJCQuc2Jnbi5jaGVja1BvaW50U3RhdGVBbmRJbmZvQm94ZXMgPSBmdW5jdGlvbiAoeCwgeSwgbm9kZSwgdGhyZXNob2xkKSB7XG4gICAgcmV0dXJuIGNsYXNzZXMuQXV4aWxpYXJ5VW5pdC5jaGVja1BvaW50KHgsIHksIG5vZGUsIHRocmVzaG9sZCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5pc05vZGVTaGFwZVRvdGFsbHlPdmVycmlkZW4gPSBmdW5jdGlvbiAocmVuZGVyLCBub2RlKSB7XG4gICAgaWYgKHRvdGFsbHlPdmVycmlkZW5Ob2RlU2hhcGVzW3JlbmRlci5nZXROb2RlU2hhcGUobm9kZSldKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59O1xuIiwiXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIganNvblRvU2Jnbm1sLCBlbGVtZW50VXRpbGl0aWVzLCBjeTtcbiAgXG4gICAgZnVuY3Rpb24gY2RUb1NiZ25tbChwYXJhbSkge1xuICAgICAganNvblRvU2Jnbm1sID0gcGFyYW0uanNvblRvU2Jnbm1sQ29udmVydGVyO1xuICAgICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG4gICAgfVxuICBcbiBcbiAgICBjZFRvU2Jnbm1sLmNvbnZlcnQgPSBmdW5jdGlvbiAoeG1sLGNhbGxiYWNrKSB7XG5cbiAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6ICdwb3N0JyxcbiAgICAgICAgICAgIHVybDogXCJodHRwOi8vd2ViLm5ld3RlZGl0b3Iub3JnOjgwODAvY2Qyc2Jnbm1sXCIsXG4gICAgICAgICAgICBkYXRhOiB4bWwsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gY2RUb1NiZ25tbDtcbiAgXG4gIH1cbiAgXG5cbiIsIlxudmFyIGxpYnMgPSByZXF1aXJlKCcuLi91dGlsaXRpZXMvbGliLXV0aWxpdGllcycpLmdldExpYnMoKTtcbnZhciBqUXVlcnkgPSAkID0gbGlicy5qUXVlcnk7XG52YXIgY3l0b3NjYXBlID0gbGlicy5jeXRvc2NhcGU7XG4vLyB2YXIgb3B0aW9uVXRpbGl0aWVzID0gcmVxdWlyZSgnLi9vcHRpb24tdXRpbGl0aWVzJyk7XG4vLyB2YXIgb3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG52YXIgdHJ1bmNhdGUgPSByZXF1aXJlKCcuL3RleHQtdXRpbGl0aWVzJykudHJ1bmNhdGU7XG4vLyBvbmx5IGZ1bmN0aW9ucyBub3QgZGVwZW5kaW5nIG9uIHRoZSBpbnN0YW5jZXMgY2FuIGJlIHVzZWQgaW4gdGhpcyB3YXlcbi8vIGUuZy4gZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZVN0YXRlVmFySWQoKVxudmFyIGVsZW1lbnRVdGlsaXRpZXMgPSByZXF1aXJlKCcuL2VsZW1lbnQtdXRpbGl0aWVzLWZhY3RvcnknKSgpO1xuXG52YXIgbnMgPSB7fTtcblxuLy8gS2VlcCBpbiBtaW5kIHRoYXQgZm9yIGVhY2ggbWV0aG9kICdtYWluT2JqJyBwYXJhbWV0ZXIgcmVmZXJzIHRvIHRoZSBtYWluIG9iamVjdCBmb3Igd2hpY2ggdGhlIG9wZXJhdGlvbiB3aWxsIGJlIGRvbmUuXG4vLyBJdCByZWZlcnMgdG8gdGhlIG9iamVjdCB0aGF0IGNvdWxkIGJlIHJlZmVyZWQgYnkgJ3RoaXMnIHdoaWxlIHRoZXJlIHdhcyBwcm90b3R5cGluZyBpbiB0aGVzZSBjbGFzc2VzLlxuLy8gRm9yIGV4YW1wbGUgQXV4aWxpYXJ5VW5pdC5jb3B5KG1haW5PYmosIGV4aXN0aW5nSW5zdGFuY2UsIG5ld1BhcmVudCwgbmV3SWQpIGNvcGllcyB0aGUgdmFyaWFibGUgcGFzc2VkIGJ5ICdtYWluT2JqJ1xuLy8gcGFyYW1ldGVyIGFuZCBpbiB0aGlzIGNhc2UgJ21haW5PYmonIGNhbiBiZSBjb25zaWRlcmVkIGFzIGB0aGUgb2JqZWN0IHRvIGJlIGNvcGllZGBcblxuLy8gVGhlIG9sZCBjb25zdHJ1Y3RvcnMgYXJlIHJlcGxhY2VkIGJ5ICdjb25zdHJ1Y3QoKScgbWV0aG9kcyB3aGlsZSByZW1vdmluZyBwcm90b3R5cGluZyBmcm9tIHRoZSBjbGFzc2VzLlxuXG4vLyAnQXV4aWxpYXJ5VW5pdCcgYW5kICdBdXhVbml0TGF5b3V0JyBvYmplY3RzIGtlZXAgdGhlIGlkIG9mIHRoZWlyIHBhcmVudCBub2RlcyBpbnN0ZWFkIG9mIHRoZSBub2RlcyB0aGVtc2VsdmVzIHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4vLyBUbyBtYWludGFpbiB0aGlzIHByb3BlcnR5IHJlbGF0ZWQgbWV0aG9kcyB0byBnZXQgYW5kIHNldCBwYXJlbnQgbm9kZXMgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiBkaXJlY3RseSBhY2Nlc3NpbmcgdGhlIHBhcmVudCBvYmplY3QuXG5cbi8vIEFsc28sIHRoZXJlIGlzIGEgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBBdXhpbGlhcnlVbml0IGNsYXNzIGFuZCBTdGF0ZVZhcmlhYmxlIGFuZCBVbml0T2ZJbmZvcm1hdGlvblxuLy8gY2xhc3Nlcy4gV2hpbGUgY2FsbGluZyBhIG1ldGhvZCBvZiBBdXhpbGlhcnlVbml0IGNsYXNzIHRoYXQgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZnJvbVxuLy8gdGhlIGFjdHVhbCBjbGFzcyBvZiByZWxhdGVkIGF1eGlsYXJ5IHVuaXQgKFdvdWxkIGJlIFN0YXRlVmFyaWFibGUgb3IgVW5pdE9mSW5mb3JtYXRpb24uIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgY29uZmxpY3Rpb25zIHdoZW4gdGhlXG4vLyBtZXRob2RzIG9mIEF1eGlsaWFyeVVuaXQgY2xhc3MgaXMgb3ZlcnJpZGVuIGJ5IHRoZXNlIGNsYXNzZXMpLiBUaGF0IGNsYXNzIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nICdnZXRBdXhVbml0Q2xhc3MobWFpbk9iaiknXG4vLyBtZXRob2QgZm9yIHRoZSBhdXhpbGFyeSB1bml0IG9iamVjdC5cblxudmFyIGdldEF1eFVuaXRDbGFzcyA9IGZ1bmN0aW9uKHVuaXQpIHtcbiAgLy8gVW5pdCBwYXJhbWV0ZXIgbWF5IHBhc3MgdGhlIHVuaXQgaXRzZWxmIG9yIHRoZSB0eXBlIG9mIHRoZSB1bml0IGNoZWNrIGl0XG4gIHZhciB1bml0VHlwZSA9IHR5cGVvZiB1bml0ID09PSAnc3RyaW5nJyA/IHVuaXQgOiB1bml0LmNsYXp6O1xuICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHVuaXQgY2xhc3MgYWNjb3JkaW5nIHRvIHRoZSB1bml0IHR5cGVcbiAgdmFyIGNsYXNzTmFtZSA9IHVuaXRUeXBlID09PSAnc3RhdGUgdmFyaWFibGUnID8gJ1N0YXRlVmFyaWFibGUnIDogJ1VuaXRPZkluZm9ybWF0aW9uJztcbiAgcmV0dXJuIG5zW2NsYXNzTmFtZV07XG59O1xuXG5ucy5nZXRBdXhVbml0Q2xhc3MgPSBnZXRBdXhVbml0Q2xhc3M7IC8vIEV4cG9zZSBnZXRBdXhVbml0Q2xhc3MgbWV0aG9kXG5cbnZhciBBdXhpbGlhcnlVbml0ID0ge307XG5cbi8vIC0tLS0tLS0tLS0tLS0tIEF1eGlsaWFyeVVuaXQgLS0tLS0tLS0tLS0tLS0gLy9cbi8vIGNvbnN0cnVjdHMgYSBuZXcgYXV4aWxpYXJ5IHVuaXQgb2JqZWN0IGFuZCByZXR1cm5zIGl0XG5BdXhpbGlhcnlVbml0LmNvbnN0cnVjdCA9IGZ1bmN0aW9uKHBhcmVudCkge1xuICB2YXIgb2JqID0ge307XG5cbiAgQXV4aWxpYXJ5VW5pdC5zZXRQYXJlbnRSZWYob2JqLCBwYXJlbnQpO1xuXG4gIG9iai5pZCA9IG51bGw7XG4gIG9iai5iYm94ID0gbnVsbDsgIFxuICBvYmouYW5jaG9yU2lkZSA9IG51bGw7XG4gIG9iai5pc0Rpc3BsYXllZCA9IGZhbHNlO1xuICBvYmouc3R5bGUgPSBudWxsO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5BdXhpbGlhcnlVbml0LmdldFBhcmVudCA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIHZhciBwYXJlbnQgPSBtYWluT2JqLnBhcmVudDtcbiAgLy8gSWYgcGFyZW50IHZhcmlhYmxlIHN0b3JlcyB0aGUgaWQgb2YgcGFyZW50IGluc3RlYWQgb2YgdGhlIGFjdHVhbCBwYXJlbnQgZ2V0IHRoZSBhY3R1YWwgcGFyZW50IGJ5IGlkXG4gIGlmICh0eXBlb2YgcGFyZW50ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBjeS5nZXRFbGVtZW50QnlJZChwYXJlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHBhcmVudDtcbn07XG5cbkF1eGlsaWFyeVVuaXQuc2V0UGFyZW50UmVmID0gZnVuY3Rpb24obWFpbk9iaiwgbmV3UGFyZW50KSB7XG4gIGlmIChtYWluT2JqICYmIG5ld1BhcmVudCkge1xuICAgIC8vIFJlZmVyZW5jZSB0byBpZCBpbnN0ZWFkIG9mIHRoZSBub2RlIGl0c2VsZiB0byBhdmFvaWQgY2lyY3VsYXIgcmVmZXJlbmNlXG4gICAgbWFpbk9iai5wYXJlbnQgPSB0eXBlb2YgbmV3UGFyZW50ID09PSAnc3RyaW5nJyA/IG5ld1BhcmVudCA6IG5ld1BhcmVudC5pZCgpO1xuICB9XG59XG5cbkF1eGlsaWFyeVVuaXQuY2hlY2tQb2ludCA9IGZ1bmN0aW9uKHgsIHksIG5vZGUsIHRocmVzaG9sZCkge1xuICB2YXIgY2VudGVyWCA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueDtcbiAgdmFyIGNlbnRlclkgPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLnk7XG4gIHZhciBwYWRkaW5nID0gcGFyc2VJbnQobm9kZS5jc3MoJ2JvcmRlci13aWR0aCcpKSAvIDI7XG4gIHZhciBzdGF0ZUFuZEluZm9zID0gbm9kZS5fcHJpdmF0ZS5kYXRhLnN0YXRlc2FuZGluZm9zO1xuICB2YXIgY3lCYXNlTm9kZVNoYXBlcyA9IGN5dG9zY2FwZS5iYXNlTm9kZVNoYXBlcztcbi8vICAgIHRocmVzaG9sZCA9IHBhcnNlRmxvYXQodGhyZXNob2xkKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlQW5kSW5mb3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc3RhdGUgPSBzdGF0ZUFuZEluZm9zW2ldO1xuXG4gICAgaWYgKCFzdGF0ZS5pc0Rpc3BsYXllZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlV2lkdGggPSBwYXJzZUZsb2F0KHN0YXRlLmJib3gudykgKyB0aHJlc2hvbGQ7XG4gICAgdmFyIHN0YXRlSGVpZ2h0ID0gcGFyc2VGbG9hdChzdGF0ZS5iYm94LmgpICsgdGhyZXNob2xkO1xuICAgIHZhciBjb29yZCA9IEF1eGlsaWFyeVVuaXQuZ2V0QWJzb2x1dGVDb29yZChzdGF0ZSwgbm9kZS5jeSgpKTtcbiAgICB2YXIgc3RhdGVDZW50ZXJYID0gY29vcmQueDtcbiAgICB2YXIgc3RhdGVDZW50ZXJZID0gY29vcmQueTtcbiAgICB2YXIgY2hlY2tQb2ludDtcblxuICAgIGlmIChzdGF0ZS5jbGF6eiA9PSBcInN0YXRlIHZhcmlhYmxlXCIpIHtcbiAgICAgIGNoZWNrUG9pbnQgPSBjeUJhc2VOb2RlU2hhcGVzW1wiZWxsaXBzZVwiXS5jaGVja1BvaW50KFxuICAgICAgICAgICAgICB4LCB5LCBwYWRkaW5nLCBzdGF0ZVdpZHRoLCBzdGF0ZUhlaWdodCwgc3RhdGVDZW50ZXJYLCBzdGF0ZUNlbnRlclkpO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUuY2xhenogPT0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIpIHtcbiAgICAgIGNoZWNrUG9pbnQgPSBjeUJhc2VOb2RlU2hhcGVzW1wicm91bmRyZWN0YW5nbGVcIl0uY2hlY2tQb2ludChcbiAgICAgICAgICAgICAgeCwgeSwgcGFkZGluZywgc3RhdGVXaWR0aCwgc3RhdGVIZWlnaHQsIHN0YXRlQ2VudGVyWCwgc3RhdGVDZW50ZXJZKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tQb2ludCA9PSB0cnVlKSB7XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG4vKlxuICogUmV0dXJuIGEgbmV3IEF1eGlsaWFyeVVuaXQgb2JqZWN0LiBBIG5ldyBwYXJlbnQgcmVmZXJlbmNlIGFuZCBuZXcgaWQgY2FuXG4gKiBvcHRpb25uYWxseSBiZSBwYXNzZWQuXG4gKi9cbkF1eGlsaWFyeVVuaXQuY29weSA9IGZ1bmN0aW9uIChtYWluT2JqLCBjeSwgZXhpc3RpbmdJbnN0YW5jZSwgbmV3UGFyZW50LCBuZXdJZCkge1xuICB2YXIgbmV3VW5pdCA9IGV4aXN0aW5nSW5zdGFuY2UgPyBleGlzdGluZ0luc3RhbmNlIDogQXV4aWxpYXJ5VW5pdC5jb25zdHJ1Y3QoKTtcblxuICB2YXIgcGFyZW50VG9TZXQgPSBuZXdQYXJlbnQgfHwgZ2V0QXV4VW5pdENsYXNzKG1haW5PYmopLmdldFBhcmVudChtYWluT2JqLCBjeSk7XG4gIEF1eGlsaWFyeVVuaXQuc2V0UGFyZW50UmVmKG5ld1VuaXQsIHBhcmVudFRvU2V0KTtcblxuICBuZXdVbml0LmlkID0gbmV3SWQgPyBuZXdJZCA6IG1haW5PYmouaWQ7XG4gIG5ld1VuaXQuYmJveCA9IGpRdWVyeS5leHRlbmQodHJ1ZSwge30sIG1haW5PYmouYmJveCk7XG4gIG5ld1VuaXQuY29vcmRUeXBlID0gbWFpbk9iai5jb29yZFR5cGU7XG4gIG5ld1VuaXQuYW5jaG9yU2lkZSA9IG1haW5PYmouYW5jaG9yU2lkZTtcbiAgbmV3VW5pdC5pc0Rpc3BsYXllZCA9IG1haW5PYmouaXNEaXNwbGF5ZWQ7XG4gIG5ld1VuaXQuc3R5bGUgPSBtYWluT2JqLnN0eWxlO1xuICByZXR1cm4gbmV3VW5pdDtcbn07XG5cbi8vIGRyYXcgdGhlIGF1eGlsaWFyeSB1bml0IGF0IGl0cyBwb3NpdGlvblxuQXV4aWxpYXJ5VW5pdC5kcmF3ID0gZnVuY3Rpb24obWFpbk9iaiwgY3ksIGNvbnRleHQpIHtcbiAgdmFyIHVuaXRDbGFzcyA9IGdldEF1eFVuaXRDbGFzcyhtYWluT2JqKTtcbiAgdmFyIGNvb3JkcyA9IHVuaXRDbGFzcy5nZXRBYnNvbHV0ZUNvb3JkKG1haW5PYmosIGN5KTtcblxuICB1bml0Q2xhc3MuZHJhd1NoYXBlKG1haW5PYmosIGN5LCBjb250ZXh0LCBjb29yZHMueCwgY29vcmRzLnkpO1xuICBpZiAodW5pdENsYXNzLmhhc1RleHQobWFpbk9iaiwgY3kpKSB7XG4gICAgdW5pdENsYXNzLmRyYXdUZXh0KG1haW5PYmosIGN5LCBjb250ZXh0LCBjb29yZHMueCwgY29vcmRzLnkpO1xuICB9XG4gIG1haW5PYmouaXNEaXNwbGF5ZWQgPSB0cnVlO1xufTtcblxuLy8gdG8gYmUgaW1wbGVtZW50ZWQgYnkgY2hpbGRyZW5cbkF1eGlsaWFyeVVuaXQuZ2V0VGV4dCA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0IG1ldGhvZCFcIik7XG59O1xuQXV4aWxpYXJ5VW5pdC5oYXNUZXh0ID0gZnVuY3Rpb24obWFpbk9iaiwgY3kpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQWJzdHJhY3QgbWV0aG9kIVwiKTtcbn07XG5BdXhpbGlhcnlVbml0LmRyYXdTaGFwZSA9IGZ1bmN0aW9uKG1haW5PYmosIGN5LCBjb250ZXh0LCB4LCB5KSB7XG4gIHZhciBzdHlsZSA9IG1haW5PYmouc3R5bGU7XG4gIGN5dG9zY2FwZS5zYmduLmRyYXdJbmZvQm94KGNvbnRleHQsIHgsIHksIG1haW5PYmouYmJveC53LCBtYWluT2JqLmJib3guaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlWydzaGFwZS1uYW1lJ10pO1xuXG4gIHZhciB0bXBfY3R4dCA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICBjb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlWydiYWNrZ3JvdW5kLWNvbG9yJ107XG4gIGNvbnRleHQuZmlsbCgpO1xuICBjb250ZXh0LmZpbGxTdHlsZSA9IHRtcF9jdHh0O1xuXG4gIHZhciBwYXJlbnQgPSBnZXRBdXhVbml0Q2xhc3MobWFpbk9iaikuZ2V0UGFyZW50KG1haW5PYmosIGN5KTtcbiAgdmFyIGJvcmRlclN0eWxlID0gc3R5bGUuZGFzaGVkID8gJ2Rhc2hlZCcgOiB1bmRlZmluZWQ7XG4gIHZhciBib3JkZXJXaWR0aCA9IHN0eWxlWydib3JkZXItd2lkdGgnXTtcbiAgLy8gU2VsZWN0ZWQgbm9kZXMgaGF2ZSBhIHNwZWNpZmljIGJvcmRlciBjb2xvciBzbyBpbmZvYm94IHNob3VsZCBoYXZlIHRoZSBzYW1lXG4gIC8vIGJvcmRlciBjb2xvciB3aGVuIHRoZSBub2RlIGlzIHNlbGVjdGVkLiBNYXkgbmVlZCB0byBiZSB1cGRhdGVkIGlmIHN0eWxlIG9mXG4gIC8vIHNlbGVjdGVkIG5vZGVzIGlzIHVwZGF0ZWQgaW4gYSBkaWZmZXJlbnQgd2F5LlxuICB2YXIgYm9yZGVyQ29sb3IgPSBwYXJlbnQuc2VsZWN0ZWQoKSA/IG51bGwgOiBzdHlsZVsnYm9yZGVyLWNvbG9yJ107XG4gIGN5dG9zY2FwZS5zYmduLmRyYXdCb3JkZXIoIHsgY29udGV4dCwgbm9kZTogcGFyZW50LCBib3JkZXJTdHlsZSwgYm9yZGVyQ29sb3IsIGJvcmRlcldpZHRoIH0gKTtcbn07XG5cbi8vIGRyYXcgdGhlIHN0YXRlc09ySW5mbydzIGxhYmVsIGF0IGdpdmVuIHBvc2l0aW9uXG5BdXhpbGlhcnlVbml0LmRyYXdUZXh0ID0gZnVuY3Rpb24obWFpbk9iaiwgY3ksIGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclkpIHtcbiAgLy8gYWNjZXNzIHRoZSBzYmdudml6UGFyYW1zIHNldCBmb3IgY3lcbiAgdmFyIG9wdGlvbnMgPSBjeS5zY3JhdGNoKCdfc2JnbnZpeicpLnNiZ252aXpQYXJhbXMub3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiAgdmFyIHVuaXRDbGFzcyA9IGdldEF1eFVuaXRDbGFzcyhtYWluT2JqKTtcbiAgdmFyIHBhcmVudCA9IHVuaXRDbGFzcy5nZXRQYXJlbnQobWFpbk9iaiwgY3kpO1xuICB2YXIgc3R5bGUgPSBtYWluT2JqLnN0eWxlO1xuXG4gIC8vIHBhcnQgb2YgOiAkJC5zYmduLmRyYXdUZXh0KGNvbnRleHQsIHRleHRQcm9wKTtcbiAgLy8gc2F2ZSBzdHlsZSBiZWZvcmUgbW9kaWZpY2F0aW9uXG4gIHZhciBvbGRGb250ID0gY29udGV4dC5mb250O1xuICB2YXIgb2xkU3R5bGUgPSBjb250ZXh0LmZpbGxTdHlsZTtcbiAgdmFyIG9sZE9wYWNpdHkgPSBjb250ZXh0Lmdsb2JhbEFscGhhO1xuXG4gIGNvbnRleHQuZm9udCA9IHN0eWxlWydmb250LXN0eWxlJ10gKyBcIiBcIiArIHN0eWxlWydmb250LXdlaWdodCddICsgXCIgXCJcbiAgICAgICAgICAgICAgICAgICsgc3R5bGVbJ2ZvbnQtc2l6ZSddICsgXCJweCBcIiArIHN0eWxlWydmb250LWZhbWlseSddO1xuICBjb250ZXh0LmZpbGxTdHlsZSA9IHN0eWxlWydmb250LWNvbG9yJ107XG4gIGNvbnRleHQudGV4dEFsaWduID0gXCJjZW50ZXJcIjtcbiAgY29udGV4dC50ZXh0QmFzZWxpbmUgPSBcIm1pZGRsZVwiO1xuICBjb250ZXh0Lmdsb2JhbEFscGhhID0gcGFyZW50LmNzcygndGV4dC1vcGFjaXR5JykgKiBwYXJlbnQuY3NzKCdvcGFjaXR5Jyk7IC8vID9cblxuICB2YXIgdGV4dDtcbiAgaWYob3B0aW9ucy5maXRMYWJlbHNUb0luZm9ib3hlcygpKXtcbiAgICAvLyBoZXJlIHdlIG1lbW9pemUgdGhlIHRydW5jYXRlZCB0ZXh0IGludG8gX3RleHRDYWNoZSxcbiAgICAvLyBhcyBpdCBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2hhbmdlcyBzbyBtdWNoXG4gICAgdGV4dCA9IHVuaXRDbGFzcy5nZXRUZXh0KG1haW5PYmosIGN5KTtcbiAgICB2YXIga2V5ID0gdGV4dCArIGNvbnRleHQuZm9udCArIG1haW5PYmouYmJveC53O1xuICAgIGlmKG1haW5PYmouX3RleHRDYWNoZSAmJiBtYWluT2JqLl90ZXh0Q2FjaGVba2V5XSkge1xuICAgICAgdGV4dCA9IG1haW5PYmouX3RleHRDYWNoZVtrZXldO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRleHQgPSB0cnVuY2F0ZSh1bml0Q2xhc3MuZ2V0VGV4dChtYWluT2JqLCBjeSksIGNvbnRleHQuZm9udCwgbWFpbk9iai5iYm94LncpO1xuICAgICAgaWYoIW1haW5PYmouX3RleHRDYWNoZSkge1xuICAgICAgICBtYWluT2JqLl90ZXh0Q2FjaGUgPSB7fTtcbiAgICAgIH1cbiAgICAgIG1haW5PYmouX3RleHRDYWNoZVtrZXldID0gdGV4dDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgdGV4dCA9IHVuaXRDbGFzcy5nZXRUZXh0KG1haW5PYmosIGN5KTtcbiAgfVxuXG4gIGNvbnRleHQuZmlsbFRleHQodGV4dCwgY2VudGVyWCwgY2VudGVyWSk7XG5cbiAgLy8gcmVzdG9yZSBzYXZlZCBzdHlsZVxuICBjb250ZXh0LmZpbGxTdHlsZSA9IG9sZFN0eWxlO1xuICBjb250ZXh0LmZvbnQgPSBvbGRGb250O1xuICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb2xkT3BhY2l0eTtcbn07XG5cbkF1eGlsaWFyeVVuaXQuZ2V0QWJzb2x1dGVDb29yZCA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIHZhciBwYXJlbnQgPSBnZXRBdXhVbml0Q2xhc3MobWFpbk9iaikuZ2V0UGFyZW50KG1haW5PYmosIGN5KTtcbiAgdmFyIHBvc2l0aW9uID0gcGFyZW50LnBvc2l0aW9uKCk7XG4gIHZhciBwYWRkaW5nID0gcGFyZW50LnBhZGRpbmcoKTtcbiAgLyogaWYocGFyZW50LmRhdGEoKS5jb21wbGV4Q2FsY3VsYXRlZFBhZGRpbmcpe1xuICAgIHBhZGRpbmcgPSBOdW1iZXIocGFyZW50LmRhdGEoKS5jb21wbGV4Q2FsY3VsYXRlZFBhZGRpbmcpO1xuICAgIC8vZGVsZXRlIHBhcmVudC5fcHJpdmF0ZS5kYXRhLmNvbXBsZXhDYWxjdWxhdGVkUGFkZGluZztcbiAgfWVsc2V7XG4gICAgcGFkZGluZyA9IHBhcmVudC5wYWRkaW5nKCk7XG4gIH0gKi9cbiAgdmFyIHBhcmVudFdpZHRoID0gcGFyZW50LndpZHRoKCk7XG4gIHZhciBwYXJlbnRIZWlnaHQgPSBwYXJlbnQuaGVpZ2h0KCk7XG4gIHZhciBib3JkZXJXaWR0aCA9IE51bWJlcihwYXJlbnQuY3NzKFwiYm9yZGVyLXdpZHRoXCIpLnJlcGxhY2UoXCJweFwiLFwiXCIpKTsvL3BhcmVudC5kYXRhKClbJ2JvcmRlci13aWR0aCddO1xuICB2YXIgcG9zaXRpb24gPSBwYXJlbnQucG9zaXRpb24oKTtcbiAgaWYgKG1haW5PYmogPT09IHVuZGVmaW5lZCB8fCBwYXJlbnQgPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBib3JkZXJXaWR0aCA9IHBhcmVudC5kYXRhKClbXCJib3JkZXItd2lkdGhcIl07XG4gIGlmICggYm9yZGVyV2lkdGggPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBhYnNYICwgYWJzWTtcbiAgaWYgKG1haW5PYmouYW5jaG9yU2lkZSA9PSBcInRvcFwiIHx8IG1haW5PYmouYW5jaG9yU2lkZSA9PSBcImJvdHRvbVwiKSB7ICAgIFxuICAgXG4gICAgYWJzWCA9ICgobWFpbk9iai5iYm94LnggKiAocGFyZW50Lm91dGVyV2lkdGgoKSAtIGJvcmRlcldpZHRoKSkgLyAxMDApICsgKHBvc2l0aW9uLnggLSBwYXJlbnRXaWR0aC8yIC0gcGFkZGluZyk7XG4gICAgYWJzWSA9IG1haW5PYmouYW5jaG9yU2lkZSA9PSBcInRvcFwiID8gcG9zaXRpb24ueSAtIHBhcmVudEhlaWdodC8yIC0gcGFkZGluZyA6IHBvc2l0aW9uLnkgKyBwYXJlbnRIZWlnaHQvMiArIHBhZGRpbmcgO1xuICAgXG4gICBcbiAgfVxuICBlbHNlIHsgICBcbiAgICBhYnNZID0gKChtYWluT2JqLmJib3gueSAqIChwYXJlbnQub3V0ZXJIZWlnaHQoKSAtIGJvcmRlcldpZHRoKSkgLyAxMDApICsgKHBvc2l0aW9uLnkgLSBwYXJlbnRIZWlnaHQvMiAtIHBhZGRpbmcpO1xuICAgIGFic1ggPSBtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJsZWZ0XCIgPyBwb3NpdGlvbi54IC0gcGFyZW50V2lkdGgvMiAtIHBhZGRpbmcgOnBvc2l0aW9uLnggKyBwYXJlbnRXaWR0aC8yICsgcGFkZGluZzsgIFxuICAgIFxuICB9XG5cbiAgXG4gIC8vIGR1ZSB0byBjb3JuZXIgb2YgYmFycmVsIHNoYXBlZCBjb21wYXJ0bWVudCBzaGlmdCBhYnNYIHRvIHJpZ2h0XG4gLyogIGlmIChwYXJlbnQuZGF0YShcImNsYXNzXCIpID09IFwiY29tcGFydG1lbnRcIil7XG4gICAgICBhYnNYICs9IHBhcmVudC5vdXRlcldpZHRoKCkgKiAwLjE7XG4gIH0gKi9cblxuICByZXR1cm4ge3g6IGFic1gsIHk6IGFic1l9O1xuICBcbn07XG5cbkF1eGlsaWFyeVVuaXQuY29udmVydFRvQWJzb2x1dGVDb29yZCA9IGZ1bmN0aW9uKG1haW5PYmosIHJlbFgsIHJlbFksIGN5KSB7XG4gIHZhciBwYXJlbnQgPSBnZXRBdXhVbml0Q2xhc3MobWFpbk9iaikuZ2V0UGFyZW50KG1haW5PYmosIGN5KTtcbiAgdmFyIHBvc2l0aW9uID0gcGFyZW50LnBvc2l0aW9uKCk7XG4gIHZhciBwYWRkaW5nID0gcGFyZW50LnBhZGRpbmcoKTtcbiAgdmFyIHBhcmVudFdpZHRoID0gcGFyZW50LndpZHRoKCk7XG4gIHZhciBwYXJlbnRIZWlnaHQgPSBwYXJlbnQuaGVpZ2h0KCk7XG4gIHZhciBib3JkZXJXaWR0aCA9IE51bWJlcihwYXJlbnQuY3NzKFwiYm9yZGVyLXdpZHRoXCIpLnJlcGxhY2UoXCJweFwiLFwiXCIpKTtcblxuXG4gIHZhciBhYnNYICwgYWJzWTtcbiAgaWYgKG1haW5PYmouYW5jaG9yU2lkZSA9PSBcInRvcFwiIHx8IG1haW5PYmouYW5jaG9yU2lkZSA9PSBcImJvdHRvbVwiKSB7ICAgIFxuICAgXG4gICAgYWJzWCA9ICgocmVsWCAqIChwYXJlbnQub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGgpKSAvIDEwMCkgKyAocG9zaXRpb24ueCAtIHBhcmVudFdpZHRoLzIgLSBwYWRkaW5nKTtcbiAgICBhYnNZID0gbWFpbk9iai5hbmNob3JTaWRlID09IFwidG9wXCIgPyBwb3NpdGlvbi55IC0gcGFyZW50SGVpZ2h0LzIgLSBwYWRkaW5nIDogcG9zaXRpb24ueSArIHBhcmVudEhlaWdodC8yICsgcGFkZGluZztcbiAgIFxuICAgXG4gIH1cbiAgZWxzZSB7ICAgXG4gICAgIGFic1kgPSAoKHJlbFkgKiAocGFyZW50Lm91dGVySGVpZ2h0KCkgLSBib3JkZXJXaWR0aCkpIC8gMTAwKSArIChwb3NpdGlvbi55IC0gcGFyZW50SGVpZ2h0LzIgLSBwYWRkaW5nKTtcbiAgICAgYWJzWCA9IG1haW5PYmouYW5jaG9yU2lkZSA9PSBcImxlZnRcIiA/IHBvc2l0aW9uLnggLSBwYXJlbnRXaWR0aC8yIC0gcGFkZGluZyA6cG9zaXRpb24ueCArIHBhcmVudFdpZHRoLzIgKyBwYWRkaW5nOyAgIFxuICAgIFxuICB9XG5cbiAvKiAgaWYgKHBhcmVudC5kYXRhKFwiY2xhc3NcIikgPT0gXCJjb21wYXJ0bWVudFwiKXtcbiAgICBhYnNYICs9IHBhcmVudC5vdXRlcldpZHRoKCkgKiAwLjE7XG4gIH07ICovXG4gIHJldHVybiB7eDogYWJzWCwgeTogYWJzWX07IFxufTtcblxuQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9SZWxhdGl2ZUNvb3JkID0gZnVuY3Rpb24obWFpbk9iaiwgYWJzWCwgYWJzWSwgY3ksIHBhcmVudE5vZGUpe1xuICBpZiAobWFpbk9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwYXJlbnROb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcGFyZW50ID0gcGFyZW50Tm9kZTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgcGFyZW50ID0gZ2V0QXV4VW5pdENsYXNzKG1haW5PYmopLmdldFBhcmVudChtYWluT2JqLCBjeSk7XG4gIH1cbiAgdmFyIHBvc2l0aW9uID0gcGFyZW50LnBvc2l0aW9uKCk7XG4gIHZhciBwYXJlbnRXaWR0aCA9IHBhcmVudC53aWR0aCgpO1xuICB2YXIgcGFyZW50SGVpZ2h0ID0gcGFyZW50LmhlaWdodCgpO1xuICB2YXIgcGFkZGluZyA9IHBhcmVudC5wYWRkaW5nKCk7XG4gLyogIGlmKHBhcmVudC5kYXRhKCkuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nKXtcbiAgICBwYWRkaW5nID0gTnVtYmVyKHBhcmVudC5kYXRhKCkuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nKVxuICB9ZWxzZXtcbiAgICBwYWRkaW5nID0gcGFyZW50LnBhZGRpbmcoKTtcbiAgfSAqL1xuIFxuIFxuIFxuIFxuICB2YXIgYm9yZGVyV2lkdGggPSBOdW1iZXIocGFyZW50LmNzcyhcImJvcmRlci13aWR0aFwiKS5yZXBsYWNlKFwicHhcIixcIlwiKSk7XG5cblxuICAvKiBpZiAocGFyZW50LmRhdGEoXCJjbGFzc1wiKSA9PSBcImNvbXBhcnRtZW50XCIpe1xuICAgIGFic1ggLT0gcGFyZW50Lm91dGVyV2lkdGgoKSAqIDAuMTtcbiAgfSAqL1xuXG4gIHZhciByZWxYICwgcmVsWTtcbiAgaWYgKG1haW5PYmouYW5jaG9yU2lkZSA9PSBcInRvcFwiIHx8IG1haW5PYmouYW5jaG9yU2lkZSA9PSBcImJvdHRvbVwiKSB7XG4gICAgXG4gICBcbiAgICByZWxYID0gKChhYnNYIC0gKHBvc2l0aW9uLnggLSBwYXJlbnRXaWR0aC8yIC0gcGFkZGluZykpICogMTAwICkvIChwYXJlbnQub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGgpO1xuICAgIHJlbFkgPSBtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJ0b3BcIiA/IDAgOiAxMDA7XG4gIH1cbiAgZWxzZSB7XG4gICBcbiAgICByZWxYID0gbWFpbk9iai5hbmNob3JTaWRlID09IFwibGVmdFwiID8gMCA6IDEwMDtcbiAgICByZWxZID0gKChhYnNZIC0gKHBvc2l0aW9uLnkgLSBwYXJlbnRIZWlnaHQvMiAtIHBhZGRpbmcpKSAqIDEwMCkgLyAocGFyZW50Lm91dGVySGVpZ2h0KCkgLSBib3JkZXJXaWR0aCk7XG4gICBcbiAgfVxuICByZWxYID0gcmVsWCA8IDAgPyAwIDogcmVsWDtcbiAgcmVsWCA9IHJlbFggPiAxMDAgPyAxMDAgOiByZWxYO1xuICByZWxZID0gcmVsWSA8IDAgPyAwIDogcmVsWTtcbiAgcmVsWSA9IHJlbFkgPiAxMDAgPyAxMDAgOiByZWxZO1xuXG4gIFxuICByZXR1cm4ge3g6IHJlbFgsIHk6IHJlbFl9O1xuICBcbiAgXG59O1xuXG5BdXhpbGlhcnlVbml0LnNldEFuY2hvclNpZGUgPSBmdW5jdGlvbihtYWluT2JqLCBub2RlKSB7XG5cbiAgdmFyIHRoaXNYID0gbWFpbk9iai5iYm94Lng7XG4gIHZhciB0aGlzWSA9IG1haW5PYmouYmJveC55O1xuICB2YXIgdGhpc0ggPSBtYWluT2JqLmJib3guaDtcbiAgdmFyIHRoaXNXID0gbWFpbk9iai5iYm94Lnc7XG4gIHZhciB3aWR0aCwgaGVpZ2h0LCBwYWRkaW5nO1xuICBpZihub2RlLmRhdGEoXCJvcmlnaW5hbFdcIikpe1xuICAgIHdpZHRoID0gbm9kZS5kYXRhKFwib3JpZ2luYWxXXCIpOyAgICBcbiAgICBwYWRkaW5nID0gMDtcbiAgfWVsc2V7XG4gICAgd2lkdGggPSBub2RlLndpZHRoKCk7XG4gICAgcGFkZGluZyA9IG5vZGUuZGF0YSgnY2xhc3MnKSA9PSBcImNvbXBsZXhcIiA/IE51bWJlcihub2RlLmRhdGEoKS5jb21wbGV4Q2FsY3VsYXRlZFBhZGRpbmcpIDogbm9kZS5wYWRkaW5nKCk7XG4gIH1cblxuICBpZihub2RlLmRhdGEoXCJvcmlnaW5hbEhcIikpe1xuICAgIGhlaWdodCA9IG5vZGUuZGF0YShcIm9yaWdpbmFsSFwiKTsgICAgXG4gICAgcGFkZGluZyA9IDA7XG4gIH1lbHNle1xuICAgIGhlaWdodCA9IG5vZGUuaGVpZ2h0KCk7XG4gICAgcGFkZGluZyA9IG5vZGUuZGF0YSgnY2xhc3MnKSA9PSBcImNvbXBsZXhcIiA/IE51bWJlcihub2RlLmRhdGEoKS5jb21wbGV4Q2FsY3VsYXRlZFBhZGRpbmcpIDogbm9kZS5wYWRkaW5nKCk7XG4gIH1cbiAgXG4gXG4gIFxuICB2YXIgcGFyZW50WCA9IChub2RlLmRhdGEoJ2NsYXNzJykgPT0gXCJjb21wYXJ0bWVudFwiIHx8IG5vZGUuZGF0YSgnY2xhc3MnKSA9PSBcImNvbXBsZXhcIikgPyBub2RlLmRhdGEoJ2Jib3gnKS54IDogbm9kZS5wb3NpdGlvbigpLng7XG4gIHZhciBwYXJlbnRZID0gKG5vZGUuZGF0YSgnY2xhc3MnKSA9PSBcImNvbXBhcnRtZW50XCIgfHwgbm9kZS5kYXRhKCdjbGFzcycpID09IFwiY29tcGxleFwiKSA/IG5vZGUuZGF0YSgnYmJveCcpLnkgOiBub2RlLnBvc2l0aW9uKCkueTtcbiAgdmFyIHBhcmVudFgxID0gTnVtYmVyKChwYXJlbnRYIC0gd2lkdGggLyAyIC0gcGFkZGluZykudG9GaXhlZCgyKSk7XG4gIHZhciBwYXJlbnRYMiA9IE51bWJlcigocGFyZW50WCt3aWR0aC8yICsgcGFkZGluZykudG9GaXhlZCgyKSk7XG4gIHZhciBwYXJlbnRZMSA9IE51bWJlcigocGFyZW50WSAtIGhlaWdodC8gMiAtIHBhZGRpbmcpLnRvRml4ZWQoMikpO1xuICB2YXIgcGFyZW50WTIgPSBOdW1iZXIoKHBhcmVudFkgKyBoZWlnaHQvIDIrIHBhZGRpbmcpLnRvRml4ZWQoMikpO1xuICB2YXIgY2VudGVyWCA9IE51bWJlcigodGhpc1grdGhpc1cvMikudG9GaXhlZCgyKSk7XG4gIHZhciBjZW50ZXJZID0gTnVtYmVyKCh0aGlzWSt0aGlzSC8yKS50b0ZpeGVkKDIpKTtcblxuXG4gIGlmIChjZW50ZXJZID09cGFyZW50WTEpe1xuICAgIG1haW5PYmouYW5jaG9yU2lkZSA9IFwidG9wXCI7XG4gIH1cbiAgZWxzZSBpZiAoY2VudGVyWSA9PSBwYXJlbnRZMikge1xuICAgIG1haW5PYmouYW5jaG9yU2lkZSA9IFwiYm90dG9tXCI7XG4gIH1cbiAgZWxzZSBpZihjZW50ZXJYID09IHBhcmVudFgxKSB7XG4gICAgbWFpbk9iai5hbmNob3JTaWRlID0gXCJsZWZ0XCI7XG4gIH1cbiAgZWxzZSBpZigoY2VudGVyWCAgPD0gIChwYXJlbnRYMiArIDIpKSAgJiYgKGNlbnRlclggID49ICAocGFyZW50WDIgLSAyKSkgKXtcbiAgICBtYWluT2JqLmFuY2hvclNpZGUgPSBcInJpZ2h0XCI7XG4gIH1lbHNle1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xuXG59O1xuXG5cblxuQXV4aWxpYXJ5VW5pdC5hZGRUb1BhcmVudCA9IGZ1bmN0aW9uIChtYWluT2JqLCBjeSwgcGFyZW50Tm9kZSwgbG9jYXRpb24sIHBvc2l0aW9uLCBpbmRleCkge1xuXG4gIC8vIGFkZCBzdGF0ZSB2YXIgdG8gdGhlIHBhcmVudCdzIHN0YXRlc2FuZGluZm9zXG4gIGlmKHR5cGVvZiBpbmRleCAhPSBcInVuZGVmaW5lZFwiKSB7IC8vIHNwZWNpZmljIGluZGV4IHByb3ZpZGVkIChmb3IgdW5kby9yZWRvIGNvbnNpc3RlbmN5KVxuICAgIHBhcmVudE5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5zcGxpY2UoaW5kZXgsIDAsIG1haW5PYmopO1xuICB9XG4gIGVsc2Uge1xuICAgIHBhcmVudE5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5wdXNoKG1haW5PYmopO1xuICB9XG5cbiAgaWYoIXBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKSkgeyAvLyBlbnN1cmUgbWluaW1hbCBpbml0aWFsaXphdGlvblxuICAgIHBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnLCB7fSk7XG4gIH1cbiAgaWYoIWxvY2F0aW9uKSB7IC8vIGxvY2F0aW9uIG5vdCBwcm92aWRlZCwgbmVlZCB0byBkZWZpbmUgaXQgYXV0b21hdGljYWxseVxuICAgIGxvY2F0aW9uID0gQXV4VW5pdExheW91dC5zZWxlY3ROZXh0QXZhaWxhYmxlKHBhcmVudE5vZGUsIGN5KTtcbiAgfVxuICAvLyBoZXJlIHdlIGFyZSBzdXJlIHRvIGhhdmUgYSBsb2NhdGlvbiBldmVuIGlmIGl0IHdhcyBub3QgcHJvdmlkZWQgYXMgYXJndW1lbnRcbiAgLy8gZ2V0IG9yIGNyZWF0ZSB0aGUgbmVjZXNzYXJ5IGxheW91dFxuICBpZighcGFyZW50Tm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW2xvY2F0aW9uXSkge1xuICAgIHBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl0gPSBBdXhVbml0TGF5b3V0LmNvbnN0cnVjdChwYXJlbnROb2RlLCBsb2NhdGlvbik7XG4gIH1cblxuICB2YXIgbGF5b3V0ID0gcGFyZW50Tm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW2xvY2F0aW9uXTtcbiAgbWFpbk9iai5hbmNob3JTaWRlID0gbG9jYXRpb247XG4gIHN3aXRjaChsb2NhdGlvbikge1xuICAgIGNhc2UgXCJ0b3BcIjogbWFpbk9iai5iYm94LnkgPSAwOyBicmVhaztcbiAgICBjYXNlIFwiYm90dG9tXCI6IG1haW5PYmouYmJveC55ID0gMTAwOyBicmVhaztcbiAgICBjYXNlIFwibGVmdFwiOiBtYWluT2JqLmJib3gueCA9IDA7IGJyZWFrO1xuICAgIGNhc2UgXCJyaWdodFwiOiBtYWluT2JqLmJib3gueCA9IDEwMDsgYnJlYWs7XG4gIH1cbiAgLy8gYWRkIHN0YXRlVmFyIHRvIGxheW91dCwgcHJlY29tcHV0aW5nIG9mIHJlbGF0aXZlIGNvb3JkcyB3aWxsIGJlIHRyaWdnZXJlZCBhY2NvcmRpbmdseVxuICB2YXIgaW5zZXJ0ZWRQb3NpdGlvbiA9IEF1eFVuaXRMYXlvdXQuYWRkQXV4VW5pdChsYXlvdXQsIGN5LCBtYWluT2JqLCBwb3NpdGlvbik7XG4gIHJldHVybiBpbnNlcnRlZFBvc2l0aW9uO1xufVxuXG5BdXhpbGlhcnlVbml0LnJlbW92ZUZyb21QYXJlbnQgPSBmdW5jdGlvbiAobWFpbk9iaiwgY3kpIHtcbiAgdmFyIHBhcmVudCA9IGdldEF1eFVuaXRDbGFzcyhtYWluT2JqKS5nZXRQYXJlbnQobWFpbk9iaiwgY3kpO1xuICB2YXIgcGFyZW50TGF5b3V0ID0gcGFyZW50LmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbWFpbk9iai5hbmNob3JTaWRlXTtcbiAgQXV4VW5pdExheW91dC5yZW1vdmVBdXhVbml0KHBhcmVudExheW91dCwgY3ksIG1haW5PYmopO1xuICBpZiAoQXV4VW5pdExheW91dC5pc0VtcHR5KHBhcmVudExheW91dCkpe1xuICAgIGRlbGV0ZSBwYXJlbnQuZGF0YSgnYXV4dW5pdGxheW91dHMnKVttYWluT2JqLmFuY2hvclNpZGVdO1xuICB9XG4gIHZhciBzdGF0ZXNhbmRpbmZvcyA9IHBhcmVudC5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpO1xuICB2YXIgaW5kZXggID0gc3RhdGVzYW5kaW5mb3MuaW5kZXhPZihtYWluT2JqKTtcbiAgc3RhdGVzYW5kaW5mb3Muc3BsaWNlKGluZGV4LCAxKTtcbn07XG5cbkF1eGlsaWFyeVVuaXQuZ2V0UG9zaXRpb25JbmRleCA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIHJldHVybiBnZXRBdXhVbml0Q2xhc3MobWFpbk9iaikuZ2V0UGFyZW50KG1haW5PYmosIGN5KS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW21haW5PYmouYW5jaG9yU2lkZV0udW5pdHMuaW5kZXhPZihtYWluT2JqKTtcbn07XG5cbm5zLkF1eGlsaWFyeVVuaXQgPSBBdXhpbGlhcnlVbml0O1xuLy8gLS0tLS0tLS0tLS0tLS0gRU5EIEF1eGlsaWFyeVVuaXQgLS0tLS0tLS0tLS0tLS0gLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0gU3RhdGVWYXJpYWJsZSAtLS0tLS0tLS0tLS0tLSAvL1xuLyoqXG4gKiBwYXJlbnQgaGFzIHRvIGJlIGEgc3RhdGVmdWwgRVBOIChjb21wbGV4LCBtYWNyb21vbGVjdWxlIG9yIG51Y2xlaWMgYWNpZClcbiAqL1xuXG52YXIgU3RhdGVWYXJpYWJsZSA9IHt9O1xuXG4vLyBTdGF0ZVZhcmlhYmxlIGV4dGVuZHMgQXV4aWxpYXJ5VW5pdCBieSBpbmhlcml0aW5nIGVhY2ggc3RhdGljIHByb3BlcnR5IG9mIGl0XG5mb3IgKHZhciBwcm9wIGluIEF1eGlsaWFyeVVuaXQpIHtcbiAgU3RhdGVWYXJpYWJsZVtwcm9wXSA9IEF1eGlsaWFyeVVuaXRbcHJvcF07XG59XG5cbi8vIENvbnN0cnVjdCBhIHN0YXRlIHZhcmlhYmxlIG9iamVjdCBieSBleHRlbmRpbmcgZGVmYXVsdCBiZWhhdmlvdXJzIG9mIGEgQXV4aWxpYXJ5VW5pdCBvYmplY3QgYW5kIHJldHVybnMgdGhhdCBvYmplY3RcblN0YXRlVmFyaWFibGUuY29uc3RydWN0ID0gZnVuY3Rpb24odmFsdWUsIHN0YXRlVmFyaWFibGVEZWZpbml0aW9uLCBwYXJlbnQsIGlkKSB7XG4gIHZhciBvYmogPSBBdXhpbGlhcnlVbml0LmNvbnN0cnVjdChwYXJlbnQpO1xuICBvYmouaWQgPSBpZCB8fCBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlU3RhdGVWYXJJZCgpO1xuICBvYmouc3RhdGUgPSB7fTtcbiAgb2JqLnN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIG9iai5zdGF0ZS52YXJpYWJsZSA9IG51bGw7XG4gIG9iai5zdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiA9IHN0YXRlVmFyaWFibGVEZWZpbml0aW9uO1xuICBvYmouY2xhenogPSBcInN0YXRlIHZhcmlhYmxlXCI7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cblN0YXRlVmFyaWFibGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKG1haW5PYmopIHtcbiAgdmFyIHN0YXRlVmFsdWUgPSBtYWluT2JqLnN0YXRlLnZhbHVlIHx8ICcnO1xuICB2YXIgc3RhdGVWYXJpYWJsZSA9IG1haW5PYmouc3RhdGUudmFyaWFibGUgPyBcIkBcIiArIG1haW5PYmouc3RhdGUudmFyaWFibGUgOiBcIlwiO1xuXG4gIHJldHVybiBzdGF0ZVZhbHVlICsgc3RhdGVWYXJpYWJsZTtcbn07XG5cblN0YXRlVmFyaWFibGUuaGFzVGV4dCA9IGZ1bmN0aW9uKG1haW5PYmopIHtcbiAgcmV0dXJuIChtYWluT2JqLnN0YXRlLnZhbHVlICYmIG1haW5PYmouc3RhdGUudmFsdWUgIT0gXCJcIikgfHwgKG1haW5PYmouc3RhdGUudmFyaWFibGUgJiYgbWFpbk9iai5zdGF0ZS52YXJpYWJsZSAhPSBcIlwiKTtcbn07XG5cbi8qdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdXBvbiBjcmVhdGlvbiBvZiBzdGF0ZSB2YXJpYWJsZSBhbmQgaXQgcmV0dXJucyB0aGUgbG9jYXRpb24gaW5mb3JtYXRpb24gb2YgdGhlIGFkZGVkIHN0YXRlIHZhcmlhYmxlXG4qL1xuU3RhdGVWYXJpYWJsZS5jcmVhdGUgPSBmdW5jdGlvbihwYXJlbnROb2RlLCBjeSwgdmFsdWUsIHZhcmlhYmxlLCBiYm94LCBsb2NhdGlvbiwgcG9zaXRpb24sIHN0eWxlLCBpbmRleCwgaWQpIHtcbiAgLy8gY3JlYXRlIHRoZSBuZXcgc3RhdGUgdmFyIG9mIGluZm9cbiAgdmFyIHN0YXRlVmFyID0gU3RhdGVWYXJpYWJsZS5jb25zdHJ1Y3QoKTtcbiAgU3RhdGVWYXJpYWJsZS5zZXRQYXJlbnRSZWYoc3RhdGVWYXIsIHBhcmVudE5vZGUpO1xuXG4gIHN0YXRlVmFyLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlVmFyLnZhcmlhYmxlID0gdmFyaWFibGU7XG4gIHN0YXRlVmFyLnN0YXRlID0ge3ZhbHVlOiB2YWx1ZSwgdmFyaWFibGU6IHZhcmlhYmxlfTtcbiAgc3RhdGVWYXIuYmJveCA9IGJib3g7XG4gIHN0YXRlVmFyLnN0eWxlID0gc3R5bGU7XG4gIGlmICggaWQgKSB7XG4gICAgc3RhdGVWYXIuaWQgPSBpZDtcbiAgfVxuICAvLyBsaW5rIHRvIGxheW91dFxuICBwb3NpdGlvbiA9IFN0YXRlVmFyaWFibGUuYWRkVG9QYXJlbnQoc3RhdGVWYXIsIGN5LCBwYXJlbnROb2RlLCBsb2NhdGlvbiwgcG9zaXRpb24sIGluZGV4KTtcbiAgcmV0dXJuIHtcbiAgICBpbmRleDogU3RhdGVWYXJpYWJsZS5nZXRQYXJlbnQoc3RhdGVWYXIsIGN5KS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmluZGV4T2Yoc3RhdGVWYXIpLFxuICAgIGxvY2F0aW9uOiBzdGF0ZVZhci5hbmNob3JTaWRlLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9XG5cbn07XG5cblN0YXRlVmFyaWFibGUucmVtb3ZlID0gZnVuY3Rpb24gKG1haW5PYmosIGN5KSB7XG4gIHZhciBwb3NpdGlvbiA9IFN0YXRlVmFyaWFibGUuZ2V0UG9zaXRpb25JbmRleChtYWluT2JqLCBjeSk7XG4gIHZhciBpbmRleCA9IFN0YXRlVmFyaWFibGUuZ2V0UGFyZW50KG1haW5PYmosIGN5KS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmluZGV4T2YobWFpbk9iaik7XG4gIFN0YXRlVmFyaWFibGUucmVtb3ZlRnJvbVBhcmVudChtYWluT2JqLCBjeSk7XG4gIC8vY29uc29sZS5sb2coXCJhZnRlciByZW1vdmVcIiwgdGhpcy5wYXJlbnQuZGF0YSgnYXV4dW5pdGxheW91dHMnKSwgdGhpcy5wYXJlbnQuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKSk7XG4gIHJldHVybiB7XG4gICAgY2xheno6IFwic3RhdGUgdmFyaWFibGVcIixcbiAgICBzdGF0ZToge1xuICAgICAgdmFsdWU6IG1haW5PYmouc3RhdGUudmFsdWUsXG4gICAgICB2YXJpYWJsZTogbWFpbk9iai5zdGF0ZS52YXJpYWJsZVxuICAgIH0sXG4gICAgYmJveDoge1xuICAgICAgdzogbWFpbk9iai5iYm94LncsXG4gICAgICBoOiBtYWluT2JqLmJib3guaFxuICAgIH0sXG4gICAgbG9jYXRpb246IG1haW5PYmouYW5jaG9yU2lkZSxcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgaW5kZXg6IGluZGV4LFxuICAgIHN0eWxlIDogbWFpbk9iai5zdHlsZVxuICB9O1xufTtcblxuU3RhdGVWYXJpYWJsZS5jb3B5ID0gZnVuY3Rpb24obWFpbk9iaiwgY3ksIG5ld1BhcmVudCwgbmV3SWQpIHtcbiAgdmFyIG5ld1N0YXRlVmFyID0gQXV4aWxpYXJ5VW5pdC5jb3B5KG1haW5PYmosIGN5LCBTdGF0ZVZhcmlhYmxlLmNvbnN0cnVjdCgpLCBuZXdQYXJlbnQsIG5ld0lkKTtcbiAgbmV3U3RhdGVWYXIuc3RhdGUgPSBqUXVlcnkuZXh0ZW5kKHRydWUsIHt9LCBtYWluT2JqLnN0YXRlKTtcbiAgbmV3U3RhdGVWYXIuc3RhdGVWYXJpYWJsZURlZmluaXRpb24gPSBtYWluT2JqLnN0YXRlVmFyaWFibGVEZWZpbml0aW9uO1xuICBuZXdTdGF0ZVZhci5jbGF6eiA9IG1haW5PYmouY2xheno7XG4gIHJldHVybiBuZXdTdGF0ZVZhcjtcbn07XG5cbm5zLlN0YXRlVmFyaWFibGUgPSBTdGF0ZVZhcmlhYmxlO1xuLy8gLS0tLS0tLS0tLS0tLS0gRU5EIFN0YXRlVmFyaWFibGUgLS0tLS0tLS0tLS0tLS0gLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0gVW5pdE9mSW5mb3JtYXRpb24gLS0tLS0tLS0tLS0tLS0gLy9cbi8qKlxuICogcGFyZW50IGNhbiBiZSBhbiBFUE4sIGNvbXBhcnRtZW50IG9yIHN1YnVuaXRcbiAqL1xuXG52YXIgVW5pdE9mSW5mb3JtYXRpb24gPSB7fTtcblxuLy8gVW5pdE9mSW5mb3JtYXRpb24gZXh0ZW5kcyBBdXhpbGlhcnlVbml0IGJ5IGluaGVyaXRpbmcgZWFjaCBzdGF0aWMgcHJvcGVydHkgb2YgaXRcbmZvciAodmFyIHByb3AgaW4gQXV4aWxpYXJ5VW5pdCkge1xuICBVbml0T2ZJbmZvcm1hdGlvbltwcm9wXSA9IEF1eGlsaWFyeVVuaXRbcHJvcF07XG59XG5cbi8vIENvbnN0cnVjdHMgYSBVbml0T2ZJbmZvcm1hdGlvbiBvYmplY3QgYnkgZXh0ZW5kaW5nIHByb3BlcnRpZXMgb2YgYW4gQXV4aWxpYXJ5VW5pdCBvYmplY3QgYW5kIHJldHVybiB0aGF0IG9iamVjdFxuVW5pdE9mSW5mb3JtYXRpb24uY29uc3RydWN0ID0gZnVuY3Rpb24odmFsdWUsIHBhcmVudCwgaWQpIHtcbiAgdmFyIG9iaiA9IEF1eGlsaWFyeVVuaXQuY29uc3RydWN0KHBhcmVudCk7XG4gIG9iai5pZCA9IGlkIHx8IGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVVbml0T2ZJbmZvSWQoKTtcbiAgb2JqLmxhYmVsID0ge3RleHQ6IHZhbHVlfTsgLy8gZnJvbSBsZWdhY3kgY29kZSwgY29udGFpbnMge3RleHQ6IH1cbiAgb2JqLmNsYXp6ID0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCI7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cblVuaXRPZkluZm9ybWF0aW9uLmdldFRleHQgPSBmdW5jdGlvbihtYWluT2JqKSB7XG4gIHJldHVybiBtYWluT2JqLmxhYmVsLnRleHQ7XG59O1xuXG5Vbml0T2ZJbmZvcm1hdGlvbi5oYXNUZXh0ID0gZnVuY3Rpb24obWFpbk9iaikge1xuICByZXR1cm4gbWFpbk9iai5sYWJlbC50ZXh0ICYmIG1haW5PYmoubGFiZWwudGV4dCAhPSBcIlwiO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgdW5pdCBvZiBpbmZvIGFuZCBsaW5rcyBldmVyeXRoaW5nIGFjY29yZGluZ2x5XG4gKiBAcGFyYW0gcGFyZW50Tm9kZSAtIHRoZSBjeXRvc2NhcGUgZWxlbWVudCBob3N0aW5nIHRoZSB1bml0IG9mIGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gdmFsdWUgLSBpdHMgdGV4dFxuICogQHBhcmFtIFtsb2NhdGlvbl0gLSB0aGUgc2lkZSB3aGVyZSBpdCB3aWxsIGJlIHBsYWNlZCB0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnQgb3IgdW5kZWZpbmVkIChhdXRvIHBsYWNlbWVudClcbiAqIEBwYXJhbSBbcG9zaXRpb25dIC0gaXRzIHBvc2l0aW9uIGluIHRoZSBvcmRlciBvZiBlbGVtZW50cyBwbGFjZWQgb24gdGhlIHNhbWUgbG9jYXRpb25cbiAqIEBwYXJhbSBbaW5kZXhdIC0gaXRzIGluZGV4IGluIHRoZSBzdGF0ZXNhbmRpbmZvcyBsaXN0XG4gKi9cblVuaXRPZkluZm9ybWF0aW9uLmNyZWF0ZSA9IGZ1bmN0aW9uIChwYXJlbnROb2RlLCBjeSwgdmFsdWUsIGJib3gsIGxvY2F0aW9uLCBwb3NpdGlvbiwgc3R5bGUsIGluZGV4LCBpZCkge1xuICAvLyBjcmVhdGUgdGhlIG5ldyB1bml0IG9mIGluZm9cbiAgdmFyIHVuaXQgPSBVbml0T2ZJbmZvcm1hdGlvbi5jb25zdHJ1Y3QodmFsdWUsIHBhcmVudE5vZGUpO1xuICB1bml0LmJib3ggPSBiYm94O1xuICB1bml0LnN0eWxlID0gc3R5bGU7XG4gIGlmICggaWQgKSB7XG4gICAgdW5pdC5pZCA9IGlkO1xuICB9XG5cbiAgLy9jb25zb2xlLmxvZyhcIndpbGwgaW5zZXJ0IG9uXCIsIGxvY2F0aW9uLCBwb3NpdGlvbik7XG4gIHBvc2l0aW9uID0gVW5pdE9mSW5mb3JtYXRpb24uYWRkVG9QYXJlbnQodW5pdCwgY3ksIHBhcmVudE5vZGUsIGxvY2F0aW9uLCBwb3NpdGlvbiwgaW5kZXgpO1xuXG4gIHJldHVybiB7XG4gICAgaW5kZXg6IFVuaXRPZkluZm9ybWF0aW9uLmdldFBhcmVudCh1bml0LCBjeSkuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5pbmRleE9mKHVuaXQpLFxuICAgIGxvY2F0aW9uOiB1bml0LmFuY2hvclNpZGUsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH1cbn07XG5cblVuaXRPZkluZm9ybWF0aW9uLnJlbW92ZSA9IGZ1bmN0aW9uIChtYWluT2JqLCBjeSkge1xuICB2YXIgcG9zaXRpb24gPSBVbml0T2ZJbmZvcm1hdGlvbi5nZXRQb3NpdGlvbkluZGV4KG1haW5PYmosIGN5KTtcbiAgdmFyIGluZGV4ID0gVW5pdE9mSW5mb3JtYXRpb24uZ2V0UGFyZW50KG1haW5PYmosIGN5KS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmluZGV4T2YobWFpbk9iaik7XG4gIFVuaXRPZkluZm9ybWF0aW9uLnJlbW92ZUZyb21QYXJlbnQobWFpbk9iaiwgY3kpO1xuICAvL2NvbnNvbGUubG9nKFwiYWZ0ZXIgcmVtb3ZlXCIsIHRoaXMucGFyZW50LmRhdGEoJ2F1eHVuaXRsYXlvdXRzJyksIHRoaXMucGFyZW50LmRhdGEoJ3N0YXRlc2FuZGluZm9zJykpO1xuICByZXR1cm4ge1xuICAgIGNsYXp6OiBcInVuaXQgb2YgaW5mb3JtYXRpb25cIixcbiAgICBsYWJlbDoge1xuICAgICAgdGV4dDogbWFpbk9iai5sYWJlbC50ZXh0XG4gICAgfSxcbiAgICBiYm94OiB7XG4gICAgICB3OiBtYWluT2JqLmJib3gudyxcbiAgICAgIGg6IG1haW5PYmouYmJveC5oXG4gICAgfSxcbiAgICBsb2NhdGlvbjogbWFpbk9iai5hbmNob3JTaWRlLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICBpbmRleDogaW5kZXgsXG4gICAgc3R5bGU6IG1haW5PYmouc3R5bGVcbiAgfTtcbn07XG5cblVuaXRPZkluZm9ybWF0aW9uLmNvcHkgPSBmdW5jdGlvbihtYWluT2JqLCBjeSwgbmV3UGFyZW50LCBuZXdJZCkge1xuICB2YXIgbmV3VW5pdE9mSW5mbyA9IEF1eGlsaWFyeVVuaXQuY29weShtYWluT2JqLCBjeSwgVW5pdE9mSW5mb3JtYXRpb24uY29uc3RydWN0KCksIG5ld1BhcmVudCwgbmV3SWQpO1xuICBuZXdVbml0T2ZJbmZvLmxhYmVsID0galF1ZXJ5LmV4dGVuZCh0cnVlLCB7fSwgbWFpbk9iai5sYWJlbCk7XG4gIG5ld1VuaXRPZkluZm8uY2xhenogPSBtYWluT2JqLmNsYXp6O1xuICByZXR1cm4gbmV3VW5pdE9mSW5mbztcbn07XG5cbm5zLlVuaXRPZkluZm9ybWF0aW9uID0gVW5pdE9mSW5mb3JtYXRpb247XG4vLyAtLS0tLS0tLS0tLS0tLSBFTkQgVW5pdE9mSW5mb3JtYXRpb24gLS0tLS0tLS0tLS0tLS0gLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0gRW50aXR5VHlwZSAtLS0tLS0tLS0tLS0tLSAvL1xuLyoqXG4gKiBUaGUgdHlwZSBvZiB0aGUgRVBOLCBmb3IgZXhhbXBsZSB0aGVyZSBjYW4gYmUgc2V2ZXJhbHMgbXlvc2luIEVQTiwgYnV0IG9ubHkgb25lIG15b3NpbiBFbnRpdHlUeXBlXG4gKiBUaGlzIGNsYXNzIHdpbGwgaG9sZCB0aGUgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHN0YXRlIHZhcmlhYmxlLCB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBhbGwgbXlvc2luc1xuICovXG5cbnZhciBFbnRpdHlUeXBlID0ge307XG5cbi8vIENvbnN0cnVjdHMgYW4gRW50aXR5VHlwZSBvYmplY3QgYW5kIHJldHVybnMgaXRcbkVudGl0eVR5cGUuY29uc3RydWN0ID0gZnVuY3Rpb24obmFtZSwgRVBOKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgb2JqLm5hbWUgPSBuYW1lOyAvLyBub3JtYWxseSB0aGUgc2FtZSBhcyBpdHMgRVBOc1xuICBvYmouc3RhdGVWYXJpYWJsZURlZmluaXRpb25zID0gW107IC8vIDAgb3IgbWFueSBzaGFyZWQgc3RhdGUgZGVmaW5pdGlvbnNcbiAgb2JqLkVQTnMgPSBbXTsgLy8gdGhlcmUgc2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCAxIGVsZW1lbnQsIGVsc2Ugbm8gcmVhc29uIHRvIGV4aXN0XG4gIHJldHVybiBvYmo7XG59O1xuXG5FbnRpdHlUeXBlLmNyZWF0ZU5ld0RlZmluaXRpb25Gb3IgPSBmdW5jdGlvbiAobWFpbk9iaiwgc3RhdGVWYXIpIHtcbiAgdmFyIG5ld0RlZmluaXRpb24gPSBTdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbi5jb25zdHJ1Y3QoKTtcbiAgbmV3RGVmaW5pdGlvbi5lbnRpdHlUeXBlID0gbWFpbk9iajtcbiAgbmV3RGVmaW5pdGlvbi5zdGF0ZVZhcmlhYmxlcy5wdXNoKHN0YXRlVmFyKTtcblxuICBzdGF0ZVZhci5zdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiA9IG5ld0RlZmluaXRpb247XG4gIHN0YXRlVmFyLnBhcmVudC5kYXRhKCdlbnRpdHlUeXBlJywgbWFpbk9iaik7XG4gIG1haW5PYmouc3RhdGVWYXJpYWJsZURlZmluaXRpb25zLnB1c2gobmV3RGVmaW5pdGlvbik7XG59O1xuXG5FbnRpdHlUeXBlLmFzc2lnblN0YXRlVmFyaWFibGUgPSBmdW5jdGlvbiAobWFpbk9iaiwgc3RhdGVWYXIpIHtcbiAgLy8gZmlyc3QgdHJpdmlhbCBjYXNlLCBubyBzdGF0ZURlZmluaXRpb24geWV0IGZvciB0aGlzIGVudGl0eVR5cGUsIHNvIHRoaXMgaXMgYSBuZXcgb25lXG4gIGlmIChtYWluT2JqLnN0YXRlVmFyaWFibGVEZWZpbml0aW9ucy5sZW5ndGggPT0gMCkge1xuICAgIEVudGl0eVR5cGUuY3JlYXRlTmV3RGVmaW5pdGlvbkZvcihtYWluT2JqLCBzdGF0ZVZhcik7XG4gIH1cbiAgZWxzZSB7IC8vIGlmIGRlZmluaXRpb25zIGFyZSBhbHJlYWR5IHByZXNlbnQsIHdlIG5lZWQgdG8gbWF0Y2ggdGhvc2UgdG8gdGhlIGN1cnJlbnQgc3RhdGVWYXJpYWJsZVxuICAgIGZvcih2YXIgaT0wOyBpIDwgbWFpbk9iai5zdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtYXRjaFN0YXRlRGVmID0gbWFpbk9iai5zdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbnNbaV07XG4gICAgICBpZiAoU3RhdGVWYXJpYWJsZURlZmluaXRpb24ubWF0Y2hTdGF0ZVZhcmlhYmxlKG1hdGNoU3RhdGVEZWYsIHN0YXRlVmFyKSl7XG4gICAgICAgIG1hdGNoU3RhdGVEZWYuc3RhdGVWYXJpYWJsZXMucHVzaChzdGF0ZVZhcik7XG4gICAgICAgIHN0YXRlVmFyLnN0YXRlVmFyaWFibGVEZWZpbml0aW9uID0gbWF0Y2hTdGF0ZURlZjtcbiAgICAgICAgc3RhdGVWYXIucGFyZW50LmRhdGEoJ2VudGl0eVR5cGUnLCBtYWluT2JqKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiBub3RoaW5nIHdhcyBtYXRjaGVkIGFtb25nIHRoZSBjdXJyZW50IHN0YXRlVmFyRGVmIG9mIHRoaXMgZW50aXR5VHlwZSwgY3JlYXRlIG5ldyBvbmVcbiAgICBFbnRpdHlUeXBlLmNyZWF0ZU5ld0RlZmluaXRpb25Gb3IobWFpbk9iaiwgc3RhdGVWYXIpO1xuICB9XG59O1xuXG5ucy5FbnRpdHlUeXBlID0gRW50aXR5VHlwZTtcbi8vIC0tLS0tLS0tLS0tLS0tIEVORCBFbnRpdHlUeXBlIC0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tIFN0YXRlVmFyaWFibGVEZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tIC8vXG4vKipcbiAqIFRoZSBzdGF0ZSB2YXJpYWJsZSBkZWZpbml0aW9uIGlzIHNvbWV0aGluZyBzaGFyZWQgYWNyb3NzIGRpZmZlcmVudCBFUE5zXG4gKiBUaGUgY29uY2VybmVkIEVQTnMgYXJlIGxpbmtlZCB0aHJvdWdoIHRoZSBlbnRpdHlwZSByZWZlcmVuY2VcbiAqL1xuXG52YXIgU3RhdGVWYXJpYWJsZURlZmluaXRpb24gPSB7fTtcblxuLy8gQ29uc3RydWN0cyBhIG5ldyBTdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiBvYmplY3QgYW5kIHJldHVybnMgaXRcblN0YXRlVmFyaWFibGVEZWZpbml0aW9uLmNvbnN0cnVjdCA9IGZ1bmN0aW9uKG5hbWUsIGVudGl0eVR5cGUpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBvYmoubmFtZSA9IG5hbWU7XG4gIG9iai5lbnRpdHlUeXBlID0gZW50aXR5VHlwZTsgLy8gcmVmZXJlbmNlIHRvIG93bmluZyBlbnRpdHkgdHlwZVxuICBvYmouc3RhdGVWYXJpYWJsZXMgPSBbXTsgLy8gdGhlcmUgc2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCAxIGVsZW1lbnQsIGVsc2Ugbm8gcmVhc29uIHRvIGV4aXN0XG4gIHJldHVybiBvYmo7XG59O1xuXG4vKipcbiAqIHJldHVybnMgYW4gYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBzaGFyZSB0aGlzIHN0YXRlIGRlZmluaXRpb25cbiAqL1xuU3RhdGVWYXJpYWJsZURlZmluaXRpb24uZ2V0Q29uY2VybmVkRVBOcyA9IGZ1bmN0aW9uKG1haW5PYmopIHtcbiAgcmV0dXJuIG1haW5PYmouZW50aXR5VHlwZS5FUE5zO1xufTtcblxuLyoqXG4gKiBHdWVzcyBpZiB0aGUgcHJvdmlkZWQgc3RhdGVWYXJpYWJsZSBiZWxvbmdzIHRvIHRoaXMgc3RhdGVWYXJEZWZpbml0aW9uXG4gKiBXZSBjb25zaWRlciBpdCBkb2VzLCBpZiBlaXRoZXIgdGhlIHN0YXRldmFyLnZhbHVlIG9yIHN0YXRldmFyLnZhcmlhYmxlIGFyZSBtYXRjaGluZyBvbmVcbiAqIGlmIHRoZSBzdGF0ZXZhciBpbiB0aGUgc2V0IG9mIHRoZSBTdGF0ZVZhckRlZlxuICogVGhpcyBpcyBiZWNhdXNlIHdlIG5vcm1hbGx5IGNvbXBhcmUgb25seSBzdGF0ZVZhcmlhYmxlcyBmcm9tIHRoZSBzYW1lIGVudGl0eVR5cGVcbiAqL1xuU3RhdGVWYXJpYWJsZURlZmluaXRpb24ubWF0Y2hTdGF0ZVZhcmlhYmxlID0gZnVuY3Rpb24obWFpbk9iaiwgc3RhdGVWYXIpIHtcbiAgZm9yKHZhciBpPTA7IGkgPCBtYWluT2JqLnN0YXRlVmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG1hdGNoU3RhdGVWYXIgPSBtYWluT2JqLnN0YXRlVmFyaWFibGVzW2ldO1xuICAgIC8vIERvbid0IG1hdGNoIGEgc3RhdGVWYXIgYWdhaW5zdCBhbm90aGVyIG9uZSBmcm9tIHRoZSBzYW1lIGVsZW1lbnQuXG4gICAgLy8gSWYgMiBzdGF0ZXZhciBvbiB0aGUgc2FtZSBlbGVtZW50LCB0aGVuIHRoZXkgaGF2ZSB0byBiZWxvbmcgdG8gMiBkaWZmZXJlbnQgc3RhdGVWYXJEZWZpbml0aW9uc1xuICAgIGlmKG1hdGNoU3RhdGVWYXIucGFyZW50ID09PSBzdGF0ZVZhci5wYXJlbnQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAvL2NvbnNvbGUubG9nKFwidHJ5XCIsIFttYXRjaFN0YXRlVmFyLnZhbHVlLCBtYXRjaFN0YXRlVmFyLnZhcmlhYmxlXSwgW3N0YXRlVmFyLnZhbHVlLCBzdGF0ZVZhci52YXJpYWJsZV0pO1xuICAgIC8vIG5vcm1hbCBzdXJlIGNhc2UuIEV4YW1wbGU6XG4gICAgLy8gUCBUMTM0IC0gdW5kZWZpbmVkIFQxMzRcbiAgICAvLyBQIHVuZGVmIC0gUCB1bmRlZlxuICAgIGlmICgvLyhtYXRjaFN0YXRlVmFyLnZhbHVlICYmIHN0YXRlVmFyLnZhbHVlICYmIG1hdGNoU3RhdGVWYXIudmFsdWUgPT0gc3RhdGVWYXIudmFsdWUgKSB8fFxuICAgICAgICAobWF0Y2hTdGF0ZVZhci52YXJpYWJsZSAmJiBzdGF0ZVZhci52YXJpYWJsZSAmJiBtYXRjaFN0YXRlVmFyLnZhcmlhYmxlID09IHN0YXRlVmFyLnZhcmlhYmxlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIG1vcmUgc3VidGxlIGNhc2UsIHdpdGggZW1wdHkgc3RhdGVWYXIuIExvb2sgb25seSBhdCB2YWx1ZSBhbmQgZGlzY2FyZCB2YXJpYWJsZVxuICAgIC8vIGV4YW1wbGU6IHVuZGVmIHVuZGVmIC0gUCB1bmRlZlxuICAgIGVsc2UgaWYgKCghbWF0Y2hTdGF0ZVZhci52YXJpYWJsZSAmJiAhc3RhdGVWYXIudmFyaWFibGUpICYmIChtYXRjaFN0YXRlVmFyLnZhbHVlIHx8IHN0YXRlVmFyLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbm5zLlN0YXRlVmFyaWFibGVEZWZpbml0aW9uID0gU3RhdGVWYXJpYWJsZURlZmluaXRpb247XG4vLyAtLS0tLS0tLS0tLS0tLSBFTkQgU3RhdGVWYXJpYWJsZURlZmluaXRpb24gLS0tLS0tLS0tLS0tLS0gLy9cblxuLy8gLS0tLS0tLS0tLS0tLS0gQXV4VW5pdExheW91dCAtLS0tLS0tLS0tLS0tLSAvL1xuLyoqXG4gKiBSZXNwb25zaWJsZSBmb3IgbGF5aW5nIG91dCB0aGUgYXV4aWxpYXJ5IHVuaXRzIGNvbnRhaW5lZCBvbiBhIHNhbWUgZWRnZVxuICovXG5cbnZhciBBdXhVbml0TGF5b3V0ID0ge307XG5cbkF1eFVuaXRMYXlvdXQuY29uc3RydWN0ID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgbG9jYXRpb24sIGFsaWdubWVudCkge1xuICB2YXIgb2JqID0ge307XG4gIG9iai51bml0cyA9IFtdO1xuICBvYmoubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgb2JqLmFsaWdubWVudCA9IGFsaWdubWVudCB8fCBcImxlZnRcIjsgLy8gdGhpcyB3YXMgaW50ZW5kZWQgdG8gYmUgdXNlZCwgYnV0IGl0IGlzbid0IGZvciBub3dcbiAgQXV4VW5pdExheW91dC5zZXRQYXJlbnROb2RlUmVmKG9iaiwgcGFyZW50Tm9kZSk7XG5cbiAgb2JqLnJlbmRlckxlbmd0aENhY2hlID0gW107XG4gIG9iai5sZW5ndGhVc2VkID0gMDtcblxuICAvLyBzcGVjaWZpYyBydWxlcyBmb3IgdGhlIGxheW91dFxuICBpZihwYXJlbnROb2RlLmRhdGEoJ2NsYXNzJykgPT0gXCJzaW1wbGUgY2hlbWljYWxcIikge1xuICAgIG9iai5vdXRlck1hcmdpbiA9IDM7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuQXV4VW5pdExheW91dC5nZXRQYXJlbnROb2RlID0gZnVuY3Rpb24obWFpbk9iaiwgY3kpIHtcbiAgLy9jb25zb2xlLmxvZyhtYWluT2JqKTtcbiAgdmFyIHBhcmVudE5vZGUgPSBtYWluT2JqLnBhcmVudE5vZGU7XG5cbiAgLy8gSWYgcGFyZW50Tm9kZSBpcyBpZCBvZiBwYXJlbnQgbm9kZSByYXRoZXIgdGhhbiBiZWluZyBpdHNlbGYgZ2V0IHRoZSBwYXJlbnQgbm9kZSBieSB0aGF0IGlkXG4gIGlmICh0eXBlb2YgcGFyZW50Tm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY3kuZ2V0RWxlbWVudEJ5SWQocGFyZW50Tm9kZSlcbiAgfVxuXG4gIHJldHVybiBwYXJlbnROb2RlO1xufTtcblxuQXV4VW5pdExheW91dC5zZXRQYXJlbnROb2RlUmVmID0gZnVuY3Rpb24obWFpbk9iaiwgcGFyZW50Tm9kZSkge1xuICBpZiAobWFpbk9iaiAmJiBwYXJlbnROb2RlKSB7XG4gICAgLy8gS2VlcCBpZCBvZiBwYXJlbnQgbm9kZSB0byBhdmFvaWQgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgIG1haW5PYmoucGFyZW50Tm9kZSA9IHR5cGVvZiBwYXJlbnROb2RlID09PSAnc3RyaW5nJyA/IHBhcmVudE5vZGUgOiBwYXJlbnROb2RlLmlkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBvdXRlck1hcmdpbjogdGhlIGxlZnQgYW5kIHJpZ2h0IHNwYWNlIGxlZnQgYmV0d2VlbiB0aGUgc2lkZSBvZiB0aGUgbm9kZSwgYW5kIHRoZSBmaXJzdCAoYW5kIGxhc3QpIGJveFxuICogdW5pdEdhcDogdGhlIHNwYWNlIGJldHdlZW4gdGhlIGF1eGlsaWFyeSB1bml0c1xuICogYWx3YXlzU2hvd0F1eFVuaXRzOiBieXBhc3NlcyBhbnkgbGltaXQgb2YgdW5pdHMgZGlzcGxheWVkLCBhbmQgcHJldmVudCB1bml0cyBmcm9tIGRpc2FwcGVhcmluZyxcbiAqIGZvcmNpbmcgYSBtaW5pbXVtIHNpemUgZm9yIHRoZSBub2RlXG4gKiBtYXhVbml0RGlzcGxheWVkOiBzaG93IGF0IG1vc3QgdGhpcyBhbW91bnQgb2YgdW5pdHMsIGV2ZW4gd2hlbiB0aGVyZSBpcyBlbm91Z2ggc3BhY2VcbiAqXG4gKiBUaGVzZSBvcHRpb25zIGNhbiBiZSBkZWZpbmVkIGF0IHRoZSBpbnN0YW5jZSBsZXZlbC4gSWYgaXQgaXMgZm91bmQgaW4gYW4gaW5zdGFuY2UsIHRoZW4gaXRcbiAqIHRha2VzIHByZWNlZGVuY2UuIElmIG5vdCBmb3VuZCwgdGhlIGZvbGxvd2luZyBjbGFzcycgdmFsdWVzIGFyZSB1c2VkLlxuICovXG5BdXhVbml0TGF5b3V0Lm91dGVyTWFyZ2luID0gNTtcbkF1eFVuaXRMYXlvdXQudW5pdEdhcCA9IDU7XG5BdXhVbml0TGF5b3V0LmN1cnJlbnRUb3BVbml0R2FwID0gNTtcbkF1eFVuaXRMYXlvdXQuY3VycmVudEJvdHRvbVVuaXRHYXAgPSA1O1xuQXV4VW5pdExheW91dC5jdXJyZW50TGVmdFVuaXRHYXAgPSA1O1xuQXV4VW5pdExheW91dC5jdXJyZW50UmlnaHRVbml0R2FwID0gNTtcbkF1eFVuaXRMYXlvdXQuYWx3YXlzU2hvd0F1eFVuaXRzID0gdHJ1ZTtcbkF1eFVuaXRMYXlvdXQubWF4VW5pdERpc3BsYXllZCA9IC0xO1xuQXV4VW5pdExheW91dC5sYXN0UG9zID0gLTE7XG5cbkF1eFVuaXRMYXlvdXQudXBkYXRlID0gZnVuY3Rpb24obWFpbk9iaiwgY3kpIHtcbiAgLy9BdXhVbml0TGF5b3V0LnByZWNvbXB1dGVDb29yZHMobWFpbk9iaiwgY3kpO1xufTtcblxuQXV4VW5pdExheW91dC5hZGRBdXhVbml0ID0gZnVuY3Rpb24obWFpbk9iaiwgY3ksIHVuaXQsIHBvc2l0aW9uLCBwcmVDb21wdXRlZCkge1xuICBpZih0eXBlb2YgcG9zaXRpb24gIT0gXCJ1bmRlZmluZWRcIikge1xuICAgIC8vY29uc29sZS5sb2coXCJhZGQgdW5pdCBhdCBwb3NpdGlpb25cIiwgcG9zaXRpb24pO1xuICAgIG1haW5PYmoudW5pdHMuc3BsaWNlKHBvc2l0aW9uLCAwLCB1bml0KTtcbiAgfVxuICBlbHNlIHtcbiAgICBtYWluT2JqLnVuaXRzLnB1c2godW5pdCk7XG4gICAgcG9zaXRpb24gPSBtYWluT2JqLnVuaXRzLmxlbmd0aCAtIDE7XG4gIH1cbiAgaWYgKHByZUNvbXB1dGVkID09PSB1bmRlZmluZWQgfHwgcHJlQ29tcHV0ZWQgPT09IGZhbHNlKSB7XG4gICAgQXV4VW5pdExheW91dC5jb21wdXRlQ29vcmRzKG1haW5PYmosIGN5LCB1bml0KTtcbiAgICB2YXIgcGFyZW50Tm9kZSA9IEF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZShtYWluT2JqLCBjeSk7XG4gICAgdmFyIGxvY2F0aW9ucyA9IEF1eFVuaXRMYXlvdXQuY2hlY2tGaXQocGFyZW50Tm9kZSxjeSk7XG4gICAgaWYobG9jYXRpb25zLmZpbHRlcihmdW5jdGlvbihsb2Mpe3JldHVybiBsb2MgPT0gbWFpbk9iai5sb2NhdGlvbn0pLmxlbmd0aCA+IDApe1xuICAgICAgQXV4VW5pdExheW91dC5maXRVbml0cyhwYXJlbnROb2RlLGN5LCBbbWFpbk9iai5sb2NhdGlvbl0pO1xuICAgIH1cbiAgICBcbiAgICBcbiAgfVxuICAvL0F1eFVuaXRMYXlvdXQudXBkYXRlTGVuZ3RoQ2FjaGUobWFpbk9iaiwgY3kpO1xuICAvL0F1eFVuaXRMYXlvdXQudXBkYXRlKG1haW5PYmosIGN5LCB0cnVlKTtcbiAgLyppZiAoQXV4VW5pdExheW91dC5nZXRBbHdheXNTaG93QXV4VW5pdHMobWFpbk9iaikpIHtcbiAgICAvLyBzZXQgYSBtaW5pbXVtIHNpemUgYWNjb3JkaW5nIHRvIGJvdGggc2lkZXMgb24gdGhlIHNhbWUgb3JpZW50YXRpb25cbiAgICBBdXhVbml0TGF5b3V0LnNldFBhcmVudE1pbkxlbmd0aChtYWluT2JqLCBjeSk7XG4gICAgLy8gbmVlZCB0byByZXNpemUgdGhlIHBhcmVudCBpbiBjYXNlIHRoZSBzcGFjZSB3YXMgdG9vIHNtYWxsXG4gICAgQXV4VW5pdExheW91dC5yZXNpemVQYXJlbnQobWFpbk9iaiwgY3ksIG1haW5PYmoubGVuZ3RoVXNlZCk7XG4gIH0qL1xuICAvL2N5LnN0eWxlKCkudXBkYXRlKCk7IC8vIDwtIHdhcyBpdCByZWFsbHkgbmVjZXNzYXJ5ID9cbiAgcmV0dXJuIHBvc2l0aW9uO1xufTtcblxuQXV4VW5pdExheW91dC5jb21wdXRlQ29vcmRzID0gZnVuY3Rpb24obWFpbk9iaiwgY3ksIHVuaXQpe1xuICBBdXhVbml0TGF5b3V0LnNldERpc3BsYXllZFVuaXRzKG1haW5PYmosIGN5KTtcbiAgdmFyIGxvY2F0aW9uID0gbWFpbk9iai5sb2NhdGlvbjtcbiAgdmFyIG5vZGUgPSBBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpO1xuICBpZiAobG9jYXRpb24gPT09IFwidG9wXCIgfHwgbG9jYXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICB2YXIgcG9zaXRpb24gPSBub2RlLnBvc2l0aW9uKCk7XG4gICAgdmFyIHBhcmVudFdpZHRoID0gbm9kZS5kYXRhKCdiYm94JykudztcbiAgICB2YXIgcGFkZGluZyA9IG5vZGUucGFkZGluZygpO1xuICAgIHZhciBwYXJlbnRXaWR0aCA9IG5vZGUud2lkdGgoKTtcbiAgICB2YXIgcGFyZW50SGVpZ2h0ID0gbm9kZS5oZWlnaHQoKTtcbiAgICB2YXIgcGFyZW50WDEgPSBwb3NpdGlvbi54IC0gcGFyZW50V2lkdGgvMiAtIHBhZGRpbmc7XG4gICAgdmFyIHBhcmVudFgyID0gcG9zaXRpb24ueCArIHBhcmVudFdpZHRoLzIgKyBwYWRkaW5nO1xuICAgIHZhciBwYXJlbnRZMSA9IHBvc2l0aW9uLnkgLSBwYXJlbnRIZWlnaHQvMiAtIHBhZGRpbmc7XG4gICAgdmFyIHBhcmVudFkyID0gcG9zaXRpb24ueSArIHBhcmVudEhlaWdodC8yICsgcGFkZGluZztcblxuICAgIGlmIChtYWluT2JqLnVuaXRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgXG4gICAgICB2YXIgcmVsYXRpdmVDb29yZHMgPSBBdXhpbGlhcnlVbml0LmNvbnZlcnRUb1JlbGF0aXZlQ29vcmQodW5pdCwgdW5pdC5iYm94LncvMiArIChwYXJlbnRYMSkgKyBBdXhVbml0TGF5b3V0LmdldEN1cnJlbnRHYXAobG9jYXRpb24pLCAocGFyZW50WTEpICsgQXV4VW5pdExheW91dC5nZXRDdXJyZW50R2FwKGxvY2F0aW9uKSwgY3kpO1xuICAgICAgdW5pdC5iYm94LnggPSByZWxhdGl2ZUNvb3Jkcy54IDtcbiAgICAgIHVuaXQuYmJveC55ID0gcmVsYXRpdmVDb29yZHMueTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbGFzdFVuaXQgPSBtYWluT2JqLnVuaXRzW21haW5PYmoudW5pdHMubGVuZ3RoIC0gMl07Ly9HZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHVuaXRcbiAgICAgIHZhciBsYXN0VW5pdEFic0NvcmQgPSBBdXhpbGlhcnlVbml0LmNvbnZlcnRUb0Fic29sdXRlQ29vcmQobGFzdFVuaXQsIGxhc3RVbml0LmJib3gueCwgbGFzdFVuaXQuYmJveC55LCBjeSk7XG4gICAgICB2YXIgcmVsYXRpdmVDb29yZHMgPSBBdXhpbGlhcnlVbml0LmNvbnZlcnRUb1JlbGF0aXZlQ29vcmQodW5pdCwgdW5pdC5iYm94LncvMisgbGFzdFVuaXRBYnNDb3JkLnggKyBsYXN0VW5pdC5iYm94LncvMiArIEF1eFVuaXRMYXlvdXQuZ2V0Q3VycmVudEdhcChsb2NhdGlvbiksIChwYXJlbnRZMSkgKyBBdXhVbml0TGF5b3V0LmdldEN1cnJlbnRHYXAobG9jYXRpb24pLCBjeSk7XG4gICAgICB1bml0LmJib3gueCA9IHJlbGF0aXZlQ29vcmRzLnggO1xuICAgICAgdW5pdC5iYm94LnkgPSByZWxhdGl2ZUNvb3Jkcy55O1xuICAgICAvLyB1bml0LmJib3gueCA9IG1haW5PYmoudW5pdHNbbGFzdFVuaXRdLmJib3gueCArICBtYWluT2JqLnVuaXRzW2xhc3RVbml0XS5iYm94LncvMiArIHVuaXQuYmJveC53LzIgKyBBdXhVbml0TGF5b3V0LmdldEN1cnJlbnRHYXAobG9jYXRpb24pO1xuICAgIH1cbiAgICB1bml0LmJib3gueSA9IChsb2NhdGlvbiA9PT0gXCJ0b3BcIikgPyAwIDogMTAwO1xuICB9Ly9XZSBkb24ndCBoYXZlIHRoZSByaWdodCBvciBsZWZ0IGFkZGl0aW9uIGNhc2VzIHlldFxufTtcblxuQXV4VW5pdExheW91dC5yZW1vdmVBdXhVbml0ID0gZnVuY3Rpb24obWFpbk9iaiwgY3ksIHVuaXQpIHtcbiAgdmFyIGluZGV4ID0gbWFpbk9iai51bml0cy5pbmRleE9mKHVuaXQpO1xuICBtYWluT2JqLnVuaXRzLnNwbGljZShpbmRleCwgMSk7XG4gIC8vQXV4VW5pdExheW91dC51cGRhdGVMZW5ndGhDYWNoZShtYWluT2JqLCBjeSk7XG4gIC8qQXV4VW5pdExheW91dC51cGRhdGUobWFpbk9iaiwgY3ksIHRydWUpO1xuICBpZiAoQXV4VW5pdExheW91dC5nZXRBbHdheXNTaG93QXV4VW5pdHMobWFpbk9iaikpIHtcbiAgICAvLyBzZXQgYSBtaW5pbXVtIHNpemUgYWNjb3JkaW5nIHRvIGJvdGggc2lkZXMgb24gdGhlIHNhbWUgb3JpZW50YXRpb25cbiAgICBBdXhVbml0TGF5b3V0LnNldFBhcmVudE1pbkxlbmd0aChtYWluT2JqLCBjeSk7XG4gIH0qL1xuICB2YXIgcGFyZW50Tm9kZSA9IEF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZShtYWluT2JqLCBjeSk7XG5cbiAgLy9UT0RPIGZpbmQgYSB3YXkgdG8gZWxpbWF0ZSB0aGlzIHJlZHVuZGFuY3kgdG8gdXBkYXRlIGluZm8tYm94IHBvc2l0aW9uc1xuICBwYXJlbnROb2RlLmRhdGEoJ2JvcmRlci13aWR0aCcsIHBhcmVudE5vZGUuZGF0YSgnYm9yZGVyLXdpZHRoJykpO1xufTtcblxuLyoqXG4gKiByZW9yZGVyIGJveGVzIHVzaW5nIHRoZWlyIGRlZmluZWQgcG9zaXRpb25zLiBGcm9tIGxlZnQgdG8gcmlnaHQgYW5kIHRvcCB0byBib3R0b20uXG4gKiB0aGlzIGVuc3VyZXMgdGhhdCB0aGVpciBvcmRlciBpbiB0aGUgbGF5b3V0J3MgbGlzdCBjb3JyZXNwb25kcyB0byB0aGUgcmVhbGl0eSBvZiB0aGUgbWFwLlxuICovXG5BdXhVbml0TGF5b3V0LnJlb3JkZXJGcm9tUG9zaXRpb25zID0gZnVuY3Rpb24obWFpbk9iaiwgY3kpIHtcbiAgbWFpbk9iai51bml0cy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcbiAgICBpZihtYWluT2JqLmxvY2F0aW9uID09IFwidG9wXCIgfHwgbWFpbk9iai5sb2NhdGlvbiA9PSBcImJvdHRvbVwiKSB7XG4gICAgICBpZiAoYS5iYm94LnggPCBiLmJib3gueCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoYS5iYm94LnggPiBiLmJib3gueCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAoYS5iYm94LnkgPCBiLmJib3gueSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoYS5iYm94LnkgPiBiLmJib3gueSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuICAvL2NvbnNvbGUubG9nKFwidW5pdHMgYWZ0ZXIgcmVvYXJkZXJcIiwgdGhpcy51bml0cyk7XG4gIC8qQXV4VW5pdExheW91dC51cGRhdGVMZW5ndGhDYWNoZShtYWluT2JqLCBjeSk7XG4gIEF1eFVuaXRMYXlvdXQudXBkYXRlKG1haW5PYmosIGN5LCB0cnVlKTsqL1xufTtcblxuLyoqXG4gKiB1c2UgYSBjYWNoZWQgbGlzdCB0byBkZXRlcm1pbmUgd2hhdCBpcyB0aGUgbGVuZ3RoIG5lZWRlZCB0byBkcmF3IHggYXV4IHVuaXRzLlxuICogY2FuIHRoZW4gYmUgY29tcGFyZWQgYWdhaW5zdCB0aGUgcGFyZW50IG5vZGUncyBkaW1lbnNpb25zLCB0byBkZWNpZGUgaG93IG1hbnlcbiAqIGF1eCB1bml0cyB0byBkcmF3LlxuICovXG5BdXhVbml0TGF5b3V0LnVwZGF0ZUxlbmd0aENhY2hlID0gZnVuY3Rpb24obWFpbk9iaiwgY3kpIHtcbiAgbWFpbk9iai5yZW5kZXJMZW5ndGhDYWNoZSA9IFswXTtcbiAgdmFyIHByZXZpb3VzID0gQXV4VW5pdExheW91dC5nZXRPdXRlck1hcmdpbihtYWluT2JqKTtcbiAgZm9yKHZhciBpPTA7IGkgPCBtYWluT2JqLnVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGN1cnJlbnRMZW5ndGg7XG4gICAgaWYoQXV4VW5pdExheW91dC5pc1RvckIobWFpbk9iaikpIHtcbiAgICAgIGN1cnJlbnRMZW5ndGggPSBtYWluT2JqLnVuaXRzW2ldLmJib3gudztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjdXJyZW50TGVuZ3RoID0gbWFpbk9iai51bml0c1tpXS5iYm94Lmg7XG4gICAgfVxuICAgIG1haW5PYmoucmVuZGVyTGVuZ3RoQ2FjaGUucHVzaChwcmV2aW91cyArIGN1cnJlbnRMZW5ndGggKyBBdXhVbml0TGF5b3V0LmdldE91dGVyTWFyZ2luKG1haW5PYmopKTtcbiAgICBwcmV2aW91cyArPSBjdXJyZW50TGVuZ3RoICsgQXV4VW5pdExheW91dC5nZXRVbml0R2FwKG1haW5PYmopO1xuICB9XG59O1xuXG4vKipcbiAqIFVzZSB0aGUgY2FjaGVkIHByZWNvbXB1dGVkIGxlbmd0aHMgdG8gZGVjaWRlIGhvdyBtYW55IHVuaXRzIHdlIGFyZSBjYXBhYmxlIG9mIGRyYXdpbmcsXG4gKiBjb25zaWRlcmluZyB0aGUgc2l6ZSBvZiB0aGUgcGFyZW50IG5vZGUuXG4gKiBUaGUgbnVtYmVyIHJldHVybmVkIHNheXM6IHdlIGFyZSBhYmxlIHRvIGRyYXcgdGhlIE4gZmlyc3QgdW5pdHMgb2YgdGhlIGxpc3RzLlxuICogVW51c2VkIGZvciBub3cuXG4gKi9cbkF1eFVuaXRMYXlvdXQuZ2V0RHJhd2FibGVVbml0QW1vdW50ID0gZnVuY3Rpb24obWFpbk9iaikge1xuICBpZihBdXhVbml0TGF5b3V0LmdldEFsd2F5c1Nob3dBdXhVbml0cyhtYWluT2JqKSkge1xuICAgIC8vIGJ5cGFzcyBhbGwgdGhpc1xuICAgIHJldHVybiBtYWluT2JqLnVuaXRzLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGdldCB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlIG9uIHdoaWNoIHdlIGRyYXdcbiAgdmFyIGF2YWlsYWJsZVNwYWNlO1xuICBpZiAoQXV4VW5pdExheW91dC5pc1RvckIobWFpbk9iaikpIHtcbiAgICBhdmFpbGFibGVTcGFjZSA9IEF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZShtYWluT2JqLCBjeSkub3V0ZXJXaWR0aCgpO1xuICB9XG4gIGVsc2Uge1xuICAgIGF2YWlsYWJsZVNwYWNlID0gQXV4VW5pdExheW91dC5nZXRQYXJlbnROb2RlKG1haW5PYmosIGN5KS5vdXRlckhlaWdodCgpO1xuICB9XG4gIC8vIGxvb3Agb3ZlciB0aGUgY2FjaGVkIHByZWNvbXB1dGVkIGxlbmd0aHNcbiAgZm9yKHZhciBpPTA7IGkgPCBtYWluT2JqLnJlbmRlckxlbmd0aENhY2hlLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYobWFpbk9iai5yZW5kZXJMZW5ndGhDYWNoZVtpXSA+IGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgICAvLyBzdG9wIGlmIHdlIG92ZXJmbG93XG4gICAgICByZXR1cm4gaSAtIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYWluT2JqLnVuaXRzLmxlbmd0aDtcbn07XG5cbkF1eFVuaXRMYXlvdXQuc2V0RGlzcGxheWVkVW5pdHMgPSBmdW5jdGlvbiAobWFpbk9iaiwgY3kpIHtcbiAgLy8gZ2V0IHRoZSBsZW5ndGggb2YgdGhlIHNpZGUgb24gd2hpY2ggd2UgZHJhd1xuXG4gIHZhciBhdmFpbGFibGVTcGFjZTtcbiAgaWYgKEF1eFVuaXRMYXlvdXQuaXNUb3JCKG1haW5PYmopKSB7XG4gICAgYXZhaWxhYmxlU3BhY2UgPSBBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpLm91dGVyV2lkdGgoKTtcbiAgICAvLyBkdWUgdG8gY29ybmVyIG9mIGJhcnJlbCBzaGFwZWQgY29tcGFydG1lbnQgZGVjcmVhc2UgYXZhaWxhYmxlU3BhY2UgLS0gbm8gaW5mb2JveCBvbiBjb3JuZXJzXG4gICAgaWYgKEF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZShtYWluT2JqLCBjeSkuZGF0YShcImNsYXNzXCIpID09IFwiY29tcGFydG1lbnRcIilcbiAgICAgICAgYXZhaWxhYmxlU3BhY2UgKj0gMC44O1xuICB9XG4gIGVsc2Uge1xuICAgIGF2YWlsYWJsZVNwYWNlID0gQXV4VW5pdExheW91dC5nZXRQYXJlbnROb2RlKG1haW5PYmosIGN5KS5vdXRlckhlaWdodCgpO1xuICB9XG5cbiAgLy8gdGhlcmUgaXMgYWx3YXlzIG4rMSBlbGVtZW50cyBpbiB0aGUgY2FjaGVkTGVuZ3RoIGZvciBuIHVuaXRzXG4gIHZhciBhbHdheXNTaG93QXV4VW5pdHMgPSBBdXhVbml0TGF5b3V0LmdldEFsd2F5c1Nob3dBdXhVbml0cyhtYWluT2JqKTtcbiAgdmFyIG1heFVuaXREaXNwbGF5ZWQgPSBBdXhVbml0TGF5b3V0LmdldE1heFVuaXREaXNwbGF5ZWQobWFpbk9iaik7XG4gIGZvcih2YXIgaT0wOyBpIDwgbWFpbk9iai51bml0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmKChtYWluT2JqLnJlbmRlckxlbmd0aENhY2hlW2krMV0gPD0gYXZhaWxhYmxlU3BhY2UgLy8gZG8gd2UgaGF2ZSBlbm91Z2ggc3BhY2U/XG4gICAgICAmJiAobWF4VW5pdERpc3BsYXllZCA9PSAtMSB8fCBpIDwgbWF4VW5pdERpc3BsYXllZCkpIC8vIGlzIHRoZXJlIG5vIGxpbWl0PyBvciBhcmUgd2UgdW5kZXIgdGhhdCBsaW1pdD9cbiAgICAgIHx8IGFsd2F5c1Nob3dBdXhVbml0cykgeyAvLyBkbyB3ZSBhbHdheXMgd2FudCB0byBzaG93IGV2ZXJ5dGhpbmcgcmVnYXJkbGVzcz9cbiAgICAgIG1haW5PYmoudW5pdHNbaV0uaXNEaXNwbGF5ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG1haW5PYmoudW5pdHNbaV0uaXNEaXNwbGF5ZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn07XG5cblxuQXV4VW5pdExheW91dC5nZXRVc2VkV2lkdGggPSBmdW5jdGlvbihub2RlLCB0Yil7XG4gIHZhciB1bml0cyA9IHRiLnVuaXRzO1xuICB2YXIgdG90YWxXaWR0aCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICB0b3RhbFdpZHRoICs9IHVuaXRzW2ldLmJib3gudztcbiAgfVxuICByZXR1cm4gdG90YWxXaWR0aDtcbn1cblxuQXV4VW5pdExheW91dC5nZXRVc2VkSGVpZ2h0ID0gZnVuY3Rpb24obm9kZSwgdGIpe1xuICB2YXIgdW5pdHMgPSB0Yi51bml0cztcbiAgdmFyIHRvdGFsSGVpZ2h0ID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bml0cy5sZW5ndGg7IGkrKykge1xuICAgIHRvdGFsSGVpZ2h0ICs9IHVuaXRzW2ldLmJib3guaDtcbiAgfVxuICByZXR1cm4gdG90YWxIZWlnaHQ7XG59XG5cbkF1eFVuaXRMYXlvdXQuZ2V0VXNlZExlbmd0aFRCID0gZnVuY3Rpb24obm9kZSwgdGIpe1xuICB2YXIgdW5pdHMgPSB0Yi51bml0cztcbiAgcmV0dXJuIEF1eFVuaXRMYXlvdXQuZ2V0VXNlZFdpZHRoKG5vZGUsIHRiKSArICh1bml0cy5sZW5ndGggKyAgMSkgKiBBdXhVbml0TGF5b3V0LnVuaXRHYXA7IC8vT25lIGdhcCBmb3IgbGVmdG1vc3Qgb3V0ZXIgbWFyZ2luXG59XG5cbkF1eFVuaXRMYXlvdXQuZ2V0VXNlZExlbmd0aExSID0gZnVuY3Rpb24obm9kZSwgdGIpe1xuICB2YXIgdW5pdHMgPSB0Yi51bml0cztcbiAgcmV0dXJuIEF1eFVuaXRMYXlvdXQuZ2V0VXNlZEhlaWdodChub2RlLCB0YikgKyAodW5pdHMubGVuZ3RoICsgIDEpICogQXV4VW5pdExheW91dC51bml0R2FwOyAvL09uZSBnYXAgZm9yIGxlZnRtb3N0IG91dGVyIG1hcmdpblxufVxuXG5BdXhVbml0TGF5b3V0LnNldEN1cnJlbnRHYXAgPSBmdW5jdGlvbiAobG9jYXRpb24sIHZhbHVlKXtcbiAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiKSB7XG4gICAgQXV4VW5pdExheW91dC5jdXJyZW50VG9wVW5pdEdhcCA9IHZhbHVlO1xuICB9XG4gIGVsc2UgaWYgKGxvY2F0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgQXV4VW5pdExheW91dC5jdXJyZW50Qm90dG9tVW5pdEdhcCA9IHZhbHVlO1xuICB9XG4gIGVsc2UgaWYgKGxvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICBBdXhVbml0TGF5b3V0LmN1cnJlbnRSaWdodFVuaXRHYXAgPSB2YWx1ZTtcbiAgfVxuICBlbHNlIHtcbiAgICBBdXhVbml0TGF5b3V0LmN1cnJlbnRMZWZ0VW5pdEdhcCA9IHZhbHVlO1xuICB9XG59O1xuXG5BdXhVbml0TGF5b3V0LmdldEN1cnJlbnRHYXAgPSBmdW5jdGlvbiAobG9jYXRpb24pe1xuICBpZiAobG9jYXRpb24gPT09IFwidG9wXCIpIHtcbiAgICByZXR1cm4gQXV4VW5pdExheW91dC5jdXJyZW50VG9wVW5pdEdhcDtcbiAgfVxuICBlbHNlIGlmIChsb2NhdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgIHJldHVybiBBdXhVbml0TGF5b3V0LmN1cnJlbnRCb3R0b21Vbml0R2FwO1xuICB9XG4gIGVsc2UgaWYgKGxvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICByZXR1cm4gQXV4VW5pdExheW91dC5jdXJyZW50UmlnaHRVbml0R2FwO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBBdXhVbml0TGF5b3V0LmN1cnJlbnRMZWZ0VW5pdEdhcDtcbiAgfVxufTtcblxuQXV4VW5pdExheW91dC5jaGVja0ZpdCA9IGZ1bmN0aW9uIChub2RlLCBjeSwgZm9yY2VDaGVjayl7XG4gIHZhciBmaXRMb2NhdGlvbnMgPSBbXTtcbiAgZm9yKHZhciBsb2NhdGlvbiBpbiBub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykpIHtcbiAgICBpZiAoZm9yY2VDaGVjayAhPT0gdW5kZWZpbmVkICYmIGxvY2F0aW9uICE9PSBmb3JjZUNoZWNrKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKEF1eFVuaXRMYXlvdXQuZ2V0Q3VycmVudEdhcChsb2NhdGlvbikgPCBBdXhVbml0TGF5b3V0LnVuaXRHYXApIHtcbiAgICAgIGZpdExvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgdW5pdCA9IG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl07XG4gICAgdmFyIHVuaXRzID0gdW5pdC51bml0cztcbiAgICBpZiAodW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGZpcnN0VW5pdCA9IHVuaXRzWzBdO1xuICAgIHZhciBsYXN0VW5pdCA9IHVuaXRzW3VuaXRzLmxlbmd0aC0xXTtcbiAgICB2YXIgY29vcmRzRmlyc3QgPSBBdXhpbGlhcnlVbml0LmNvbnZlcnRUb0Fic29sdXRlQ29vcmQoZmlyc3RVbml0LCBmaXJzdFVuaXQuYmJveC54LCBmaXJzdFVuaXQuYmJveC55LCBjeSk7XG4gICAgdmFyIGNvb3Jkc0xhc3QgPSBBdXhpbGlhcnlVbml0LmNvbnZlcnRUb0Fic29sdXRlQ29vcmQobGFzdFVuaXQsIGxhc3RVbml0LmJib3gueCwgbGFzdFVuaXQuYmJveC55LCBjeSk7XG4gICAgdmFyIGdhcCA9IEF1eFVuaXRMYXlvdXQuZ2V0Q3VycmVudEdhcChsb2NhdGlvbik7XG4gICAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgICBpZiAodW5pdHMubGVuZ3RoID4gMCkgeyAvL0ZvciBhbnkgY2FzZSBvZiByZW1vdmFsXG4gICAgICBpZiAobG9jYXRpb24gPT09IFwidG9wXCIgfHwgbG9jYXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgdmFyIHBhcmVudFgxID0gbm9kZS5wb3NpdGlvbigpLnggLSBub2RlLndpZHRoKCkvMiAtIHBhZGRpbmc7XG4gICAgICAgIHZhciBwYXJlbnRYMiA9IG5vZGUucG9zaXRpb24oKS54ICsgbm9kZS53aWR0aCgpLzIgKyBwYWRkaW5nO1xuICAgICAgICB2YXIgZmlyc3RYMSA9IGNvb3Jkc0ZpcnN0LnggLSBmaXJzdFVuaXQuYmJveC53LzI7XG4gICAgICAgIHZhciBsYXN0WDIgPSBjb29yZHNMYXN0LnggKyBsYXN0VW5pdC5iYm94LncvMjtcblxuICAgICAgICBpZihwYXJlbnRYMiA8IGxhc3RYMiArIGdhcCl7XG4gICAgICAgICAgZml0TG9jYXRpb25zLnB1c2gobG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgKHBhcmVudFgxICsgZ2FwID4gZmlyc3RYMSB8fCBwYXJlbnRYMiAtIGdhcCA8IGxhc3RYMikge1xuICAgICAgICAgICAgZml0TG9jYXRpb25zLnB1c2gobG9jYXRpb24pO1xuICAgICAgICB9ICovXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIHBhcmVudFkxID0gbm9kZS5wb3NpdGlvbigpLnkgLSBub2RlLmhlaWdodCgpLzIgLSBwYWRkaW5nO1xuICAgICAgICB2YXIgcGFyZW50WTIgPSBub2RlLnBvc2l0aW9uKCkueSArIG5vZGUuaGVpZ2h0KCkvMiArIHBhZGRpbmc7XG4gICAgICAgIHZhciBmaXJzdFkxID0gY29vcmRzRmlyc3QueSAtIGZpcnN0VW5pdC5iYm94LmgvMjtcbiAgICAgICAgdmFyIGxhc3RZMiA9IGNvb3Jkc0xhc3QueSArIGxhc3RVbml0LmJib3guaC8yO1xuICAgICAgICBpZihwYXJlbnRZMiA8IGxhc3RZMiArIGdhcCl7XG4gICAgICAgICAgZml0TG9jYXRpb25zLnB1c2gobG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgLyogaWYgKHBhcmVudFkxICsgZ2FwID4gZmlyc3RZMSB8fCBwYXJlbnRZMiAtIGdhcCA8IGxhc3RZMikge1xuICAgICAgICAgICAgZml0TG9jYXRpb25zLnB1c2gobG9jYXRpb24pO1xuICAgICAgICB9ICovXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaXRMb2NhdGlvbnM7XG59O1xuXG5BdXhVbml0TGF5b3V0LnNldElkZWFsR2FwID0gZnVuY3Rpb24obm9kZSwgbG9jYXRpb24pe1xuXG4gIHZhciBwYXJlbnRXaWR0aCA9IG5vZGUud2lkdGgoKTtcbiAgdmFyIHBhcmVudEhlaWdodCA9IG5vZGUuaGVpZ2h0KCk7XG4gIHZhciBwYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gIHZhciBwb3NpdGlvbiA9IG5vZGUucG9zaXRpb24oKTtcbiAgdmFyIHBhcmVudFgxID0gcG9zaXRpb24ueCAtIHBhcmVudFdpZHRoLzIgLSBwYWRkaW5nO1xuICB2YXIgcGFyZW50WTEgPSBwb3NpdGlvbi55IC0gcGFyZW50SGVpZ2h0LzIgLSBwYWRkaW5nO1xuICB2YXIgZXN0aW1hdGVkR2FwO1xuICAgXG4gICAgdmFyIGF1eFVuaXQgPSBub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbG9jYXRpb25dO1xuICAgIGlmIChhdXhVbml0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBpZiAoYXV4VW5pdC51bml0cy5sZW5ndGggPD0gMCB8fCAhYXV4VW5pdC51bml0cykge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHZhciB1bml0cyA9IGF1eFVuaXQudW5pdHM7XG4gICAgXG4gICAgaWYgKCBsb2NhdGlvbiA9PT0gXCJ0b3BcIiB8fCBsb2NhdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgdXNlZExlbmd0aCA9IEF1eFVuaXRMYXlvdXQuZ2V0VXNlZExlbmd0aFRCKG5vZGUsIGF1eFVuaXQpO1xuICAgICAgdmFyIHRvdGFsV2lkdGggPSBBdXhVbml0TGF5b3V0LmdldFVzZWRXaWR0aChub2RlLCBhdXhVbml0KTtcbiAgICAgIGVzdGltYXRlZEdhcCA9IChwYXJlbnRXaWR0aCArIDIqIHBhZGRpbmcgLSB0b3RhbFdpZHRoKSAvICh1bml0cy5sZW5ndGggKyAxKTtcbiAgICAgIGlmIChlc3RpbWF0ZWRHYXAgPiBBdXhVbml0TGF5b3V0LnVuaXRHYXApIHtcbiAgICAgICAgZXN0aW1hdGVkR2FwID0gQXV4VW5pdExheW91dC51bml0R2FwO1xuICAgICAgfVxuXG4gICAgICAvL3ZhciBmaXJzdFBvc2l0aW9uID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9SZWxhdGl2ZUNvb3JkKHVuaXRzWzBdLCB1bml0WzBdLmJib3gudy8yICsgKHBhcmVudFgxKSArIGVzdGltYXRlZEdhcCwgKHBhcmVudFkxKSArIGVzdGltYXRlZEdhcCwgdW5kZWZpbmVkLCBub2RlKTsvL1Bvc2l0aW9uIG9mIHRoZSBmaXJzdCB1bml0XG4gICAgICBcbiAgICAgIHZhciB1c2VkTGVuZ3RoID0gZXN0aW1hdGVkR2FwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmVsYXRpdmVDb3JkID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9SZWxhdGl2ZUNvb3JkKHVuaXRzW2ldLCBwYXJlbnRYMSArdXNlZExlbmd0aCArIHVuaXRzW2ldLmJib3gudy8yLCAocGFyZW50WTEpICwgdW5kZWZpbmVkLCBub2RlKTtcbiAgICAgICAgdW5pdHNbaV0uYmJveC54ID0gcmVsYXRpdmVDb3JkLng7XG4gICAgICAgIHVuaXRzW2ldLmJib3gueSA9IHJlbGF0aXZlQ29yZC55O1xuICAgICAgICB1c2VkTGVuZ3RoICs9IHVuaXRzW2ldLmJib3gudysgZXN0aW1hdGVkR2FwOyAgICAgICBcbiAgICAgICBcbiAgICAgIH1cbiAgICAgIEF1eFVuaXRMYXlvdXQuc2V0Q3VycmVudEdhcChsb2NhdGlvbiwgZXN0aW1hdGVkR2FwKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvL0ZpbmQgdG90YWwgbGVmdCBsZW5ndGhcbiAgICAgIHVzZWRMZW5ndGggPSBBdXhVbml0TGF5b3V0LmdldFVzZWRMZW5ndGhMUihub2RlLCBhdXhVbml0KTtcbiAgICAgIC8vQ29tcGFyZSB0aGUgc2lkZSBsZW5ndGhzXG4gICAgICB2YXIgdG90YWxIZWlnaHQgPSBBdXhVbml0TGF5b3V0LmdldFVzZWRIZWlnaHQobm9kZSwgYXV4VW5pdCk7XG4gICAgICBlc3RpbWF0ZWRHYXAgPSAocGFyZW50SGVpZ2h0ICsgMiogcGFkZGluZyAtIHRvdGFsSGVpZ2h0KSAvICh1bml0cy5sZW5ndGggKyAxKTtcbiAgICAgIGlmIChlc3RpbWF0ZWRHYXAgPiBBdXhVbml0TGF5b3V0LnVuaXRHYXApIHtcbiAgICAgICAgZXN0aW1hdGVkR2FwID0gQXV4VW5pdExheW91dC51bml0R2FwO1xuICAgICAgfVxuICAgICAgLy9FbHNlIHNjYWxlIGJ5IHVzaW5nIGF2YWlsYWJsZSBzcGFjZSwgcmVkdWNpbmcgbWFyZ2lucyBhbmQgZ2Fwcy5cbiAgICAgIC8vQ2hlY2sgaWYgbmV3IGdhcCBpcyBlbm91Z2ggdG8gZml0XG4gICAgICB2YXIgdXNlZExlbmd0aCA9IGVzdGltYXRlZEdhcDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlbGF0aXZlQ29yZCA9IEF1eGlsaWFyeVVuaXQuY29udmVydFRvUmVsYXRpdmVDb29yZCh1bml0c1tpXSwgcGFyZW50WDEgLCAocGFyZW50WTEpICsgdXNlZExlbmd0aCArIHVuaXRzW2ldLmJib3guaC8yLCB1bmRlZmluZWQsIG5vZGUpO1xuICAgICAgICB1bml0c1tpXS5iYm94LnggPSByZWxhdGl2ZUNvcmQueDtcbiAgICAgICAgdW5pdHNbaV0uYmJveC55ID0gcmVsYXRpdmVDb3JkLnk7XG4gICAgICAgIHVzZWRMZW5ndGggKz0gdW5pdHNbaV0uYmJveC5oKyBlc3RpbWF0ZWRHYXA7XG4gICAgICB9XG4gICAgICAvL0F1eFVuaXRMYXlvdXQuY3VycmVudExlZnRVbml0R2FwID0gZXN0aW1hdGVkR2FwO1xuICAgIH1cbiAgICBBdXhVbml0TGF5b3V0LnNldEN1cnJlbnRHYXAobG9jYXRpb24sIGVzdGltYXRlZEdhcCk7XG4gIFxufVxuQXV4VW5pdExheW91dC5maXRVbml0cyA9IGZ1bmN0aW9uIChub2RlLCBjeSwgbG9jYXRpb25zKSB7XG5cbiAgdmFyIHBhcmVudFdpZHRoID0gbm9kZS53aWR0aCgpO1xuICB2YXIgcGFyZW50SGVpZ2h0ID0gbm9kZS5oZWlnaHQoKTtcbiAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgdmFyIHBvc2l0aW9uID0gbm9kZS5wb3NpdGlvbigpO1xuICB2YXIgcGFyZW50WDEgPSBwb3NpdGlvbi54IC0gcGFyZW50V2lkdGgvMiAtIHBhZGRpbmc7XG4gIHZhciBwYXJlbnRYMiA9IHBvc2l0aW9uLnggKyBwYXJlbnRXaWR0aC8yICsgcGFkZGluZztcbiAgdmFyIHBhcmVudFkxID0gcG9zaXRpb24ueSAtIHBhcmVudEhlaWdodC8yIC0gcGFkZGluZztcbiAgdmFyIHBhcmVudFkyID0gcG9zaXRpb24ueSArIHBhcmVudEhlaWdodC8yICsgcGFkZGluZztcblxuICAvL0dldCBQYXJlbnQgbm9kZSBhbmQgZmluZCBwYXJlbnQgd2lkdGhcbiAgXG4gIHZhciBlc3RpbWF0ZWRHYXA7XG5cbiAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IGxvY2F0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICB2YXIgbG9jYXRpb24gPSBsb2NhdGlvbnNbaW5kZXhdO1xuICAgIHZhciBhdXhVbml0ID0gbm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW2xvY2F0aW9uXTtcbiAgICBpZiAoYXV4VW5pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGF1eFVuaXQudW5pdHMubGVuZ3RoIDw9IDAgfHwgIWF1eFVuaXQudW5pdHMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB2YXIgdW5pdHMgPSBhdXhVbml0LnVuaXRzO1xuICAgIFxuICAgIGlmICggbG9jYXRpb24gPT09IFwidG9wXCIgfHwgbG9jYXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgIHVzZWRMZW5ndGggPSBBdXhVbml0TGF5b3V0LmdldFVzZWRMZW5ndGhUQihub2RlLCBhdXhVbml0KTtcbiAgICAgIHZhciB0b3RhbFdpZHRoID0gQXV4VW5pdExheW91dC5nZXRVc2VkV2lkdGgobm9kZSwgYXV4VW5pdCk7XG4gICAgICBlc3RpbWF0ZWRHYXAgPSAocGFyZW50V2lkdGggKyAyKnBhZGRpbmcgLSB0b3RhbFdpZHRoKSAvICh1bml0cy5sZW5ndGggKyAxKTtcbiAgICAgIGlmIChlc3RpbWF0ZWRHYXAgPiBBdXhVbml0TGF5b3V0LnVuaXRHYXApIHtcbiAgICAgICAgZXN0aW1hdGVkR2FwID0gQXV4VW5pdExheW91dC51bml0R2FwO1xuICAgICAgfVxuXG4gICAgICAvL3ZhciBmaXJzdFBvc2l0aW9uID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9SZWxhdGl2ZUNvb3JkKHVuaXRzWzBdLCB1bml0WzBdLmJib3gudy8yICsgKHBhcmVudFgxKSArIGVzdGltYXRlZEdhcCwgKHBhcmVudFkxKSArIGVzdGltYXRlZEdhcCwgdW5kZWZpbmVkLCBub2RlKTsvL1Bvc2l0aW9uIG9mIHRoZSBmaXJzdCB1bml0XG4gICAgICBcbiAgICAgIHZhciB1c2VkTGVuZ3RoID0gZXN0aW1hdGVkR2FwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcmVsYXRpdmVDb3JkID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9SZWxhdGl2ZUNvb3JkKHVuaXRzW2ldLCBwYXJlbnRYMSArdXNlZExlbmd0aCArIHVuaXRzW2ldLmJib3gudy8yLCAocGFyZW50WTEpICwgdW5kZWZpbmVkLCBub2RlKTtcbiAgICAgICAgdW5pdHNbaV0uYmJveC54ID0gcmVsYXRpdmVDb3JkLng7XG4gICAgICAgIHVuaXRzW2ldLmJib3gueSA9IHJlbGF0aXZlQ29yZC55O1xuICAgICAgICB1c2VkTGVuZ3RoICs9IHVuaXRzW2ldLmJib3gudysgZXN0aW1hdGVkR2FwOyAgICAgICBcbiAgICAgICBcbiAgICAgIH1cbiAgICAgIEF1eFVuaXRMYXlvdXQuc2V0Q3VycmVudEdhcChsb2NhdGlvbiwgZXN0aW1hdGVkR2FwKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvL0ZpbmQgdG90YWwgbGVmdCBsZW5ndGhcbiAgICAgIHVzZWRMZW5ndGggPSBBdXhVbml0TGF5b3V0LmdldFVzZWRMZW5ndGhMUihub2RlLCBhdXhVbml0KTtcbiAgICAgIC8vQ29tcGFyZSB0aGUgc2lkZSBsZW5ndGhzXG4gICAgICB2YXIgdG90YWxIZWlnaHQgPSBBdXhVbml0TGF5b3V0LmdldFVzZWRIZWlnaHQobm9kZSwgYXV4VW5pdCk7XG4gICAgICBlc3RpbWF0ZWRHYXAgPSAocGFyZW50SGVpZ2h0ICsgMipwYWRkaW5nICAtIHRvdGFsSGVpZ2h0KSAvICh1bml0cy5sZW5ndGggKyAxKTtcbiAgICAgIGlmIChlc3RpbWF0ZWRHYXAgPiBBdXhVbml0TGF5b3V0LnVuaXRHYXApIHtcbiAgICAgICAgZXN0aW1hdGVkR2FwID0gQXV4VW5pdExheW91dC51bml0R2FwO1xuICAgICAgfVxuICAgICAgLy9FbHNlIHNjYWxlIGJ5IHVzaW5nIGF2YWlsYWJsZSBzcGFjZSwgcmVkdWNpbmcgbWFyZ2lucyBhbmQgZ2Fwcy5cbiAgICAgIC8vQ2hlY2sgaWYgbmV3IGdhcCBpcyBlbm91Z2ggdG8gZml0XG4gICAgICB2YXIgdXNlZExlbmd0aCA9IGVzdGltYXRlZEdhcDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlbGF0aXZlQ29yZCA9IEF1eGlsaWFyeVVuaXQuY29udmVydFRvUmVsYXRpdmVDb29yZCh1bml0c1tpXSwgcGFyZW50WDEgLCAocGFyZW50WTEpICsgdXNlZExlbmd0aCArIHVuaXRzW2ldLmJib3guaC8yLCB1bmRlZmluZWQsIG5vZGUpO1xuICAgICAgICB1bml0c1tpXS5iYm94LnggPSByZWxhdGl2ZUNvcmQueDtcbiAgICAgICAgdW5pdHNbaV0uYmJveC55ID0gcmVsYXRpdmVDb3JkLnk7XG4gICAgICAgIHVzZWRMZW5ndGggKz0gdW5pdHNbaV0uYmJveC5oKyBlc3RpbWF0ZWRHYXA7XG4gICAgICB9XG4gICAgICAvL0F1eFVuaXRMYXlvdXQuY3VycmVudExlZnRVbml0R2FwID0gZXN0aW1hdGVkR2FwO1xuICAgIH1cbiAgICBBdXhVbml0TGF5b3V0LnNldEN1cnJlbnRHYXAobG9jYXRpb24sIGVzdGltYXRlZEdhcCk7XG4gIH1cblxuICAvL1RPRE8gZmluZCBhIHdheSB0byBlbGltYXRlIHRoaXMgcmVkdW5kYW5jeSB0byB1cGRhdGUgaW5mby1ib3ggcG9zaXRpb25zXG4gIG5vZGUuZGF0YSgnYm9yZGVyLXdpZHRoJywgbm9kZS5kYXRhKCdib3JkZXItd2lkdGgnKSk7XG5cbn07XG5cblxuLy8gQ2FsY3VsYXRlIHRvdGFsIGxlbmd0aCB1c2VkIGluIGEgc2lkZVxuLy8gVE9ETyBmaW5kIGEgd2F5IHRvIHJlZmFjdG9yLCByZW1vdmUgdWdsaW5lc3Mgb2YgdG9wLWJvdHRvbS9sZWZ0LXJpZ2h0LlxuQXV4VW5pdExheW91dC5wcmVjb21wdXRlQ29vcmRzID0gZnVuY3Rpb24gKG1haW5PYmosIGN5LCBkb0ZvcmNlVXBkYXRlKSB7XG4gIEF1eFVuaXRMYXlvdXQuc2V0RGlzcGxheWVkVW5pdHMobWFpbk9iaiwgY3kpO1xuICB2YXIgbGVuZ3RoVXNlZCA9IEF1eFVuaXRMYXlvdXQuZ2V0T3V0ZXJNYXJnaW4obWFpbk9iaik7XG4gIHZhciBmaW5hbExlbmd0aFVzZWQgPSBsZW5ndGhVc2VkO1xuICB2YXIgdW5pdEdhcCA9IEF1eFVuaXRMYXlvdXQuZ2V0VW5pdEdhcChtYWluT2JqKTtcbiAgdmFyIHBhcmVudE5vZGUgPSBBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpO1xuXG4gIGZvcih2YXIgaT0wOyBpIDwgbWFpbk9iai51bml0cy5sZW5ndGg7IGkrKykge1xuICAgIC8vIGNoYW5nZSB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGF1eGlsaWFyeSB1bml0IGFjY29yZGluZyB0byB0aGUgY2hvc2VuIGxheW91dFxuICAgIHZhciBhdXhVbml0ID0gbWFpbk9iai51bml0c1tpXTtcbiAgICBpZiAoYXV4VW5pdC5jb29yZFR5cGUgIT0gXCJyZWxhdGl2ZVRvU2lkZVwiIHx8IGRvRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChhdXhVbml0LmNvb3JkVHlwZSA9PSBcInJlbGF0aXZlVG9DZW50ZXJcIiB8fCBkb0ZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGlmKEF1eFVuaXRMYXlvdXQuaXNUb3JCKG1haW5PYmopKSB7XG4gICAgICAgICAgLy9hdXhVbml0LmJib3gueSA9IDA7XG4gICAgICAgICAgYXV4VW5pdC5iYm94LnggPSBsZW5ndGhVc2VkICsgYXV4VW5pdC5iYm94LncgLyAyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vYXV4VW5pdC5iYm94LnggPSAwO1xuICAgICAgICAgIGF1eFVuaXQuYmJveC55ID0gbGVuZ3RoVXNlZCArIGF1eFVuaXQuYmJveC5oIC8gMjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXV4VW5pdC5jb29yZFR5cGUgPSBcInJlbGF0aXZlVG9TaWRlXCI7XG4gICAgfVxuXG4gICAgaWYoQXV4VW5pdExheW91dC5pc1RvckIobWFpbk9iaikpIHtcbiAgICAgIC8vYXV4VW5pdC5iYm94LnkgPSAwO1xuICAgICAgbGVuZ3RoVXNlZCArPSBhdXhVbml0LmJib3gudyArIHVuaXRHYXA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy9hdXhVbml0LmJib3gueCA9IDA7XG4gICAgICBsZW5ndGhVc2VkICs9IGF1eFVuaXQuYmJveC5oICsgdW5pdEdhcDtcbiAgICB9XG5cbiAgICBpZihhdXhVbml0LmlzRGlzcGxheWVkKSB7XG4gICAgICBmaW5hbExlbmd0aFVzZWQgPSBsZW5ndGhVc2VkO1xuICAgIH1cbiAgfVxuICAvLyBhZGp1c3QgdGhlIGxlbmd0aCwgc2hvdWxkIGJlIGNvbXBvc2VkIG9mIG91dGVyTWFyZ2luIG9uIHRoZSBlbmQsIG5vdCB1bml0R2FwXG4gIGZpbmFsTGVuZ3RoVXNlZCA9IGZpbmFsTGVuZ3RoVXNlZCAtIHVuaXRHYXAgKyBBdXhVbml0TGF5b3V0LmdldE91dGVyTWFyZ2luKG1haW5PYmopO1xuXG4gIG1haW5PYmoubGVuZ3RoVXNlZCA9IGZpbmFsTGVuZ3RoVXNlZDtcbn07XG5cbkF1eFVuaXRMYXlvdXQuZHJhdyA9IGZ1bmN0aW9uIChtYWluT2JqLCBjeSwgY29udGV4dCkge1xuICBmb3IodmFyIGk9MDsgaSA8IG1haW5PYmoudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXV4VW5pdCA9IG1haW5PYmoudW5pdHNbaV07XG4gICAgICBnZXRBdXhVbml0Q2xhc3MoYXV4VW5pdCkuZHJhdyhhdXhVbml0LCBjeSwgY29udGV4dCk7XG4gIH1cbn07XG5cbkF1eFVuaXRMYXlvdXQubW9kaWZ5VW5pdHMgPSBmdW5jdGlvbihwYXJlbnROb2RlLCB1bml0LCBvbGRMb2NhdGlvbiwgY3kpe1xuICB2YXIgbG9jYXRpb24gPSB1bml0LmFuY2hvclNpZGU7XG4gIHZhciBwb3NYID0gdW5pdC5iYm94Lng7XG4gIHZhciBwb3NZID0gdW5pdC5iYm94Lnk7XG4gIGlmICghcGFyZW50Tm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW29sZExvY2F0aW9uXSkge1xuICAgIHBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtvbGRMb2NhdGlvbl0gPSBBdXhVbml0TGF5b3V0LmNvbnN0cnVjdChwYXJlbnROb2RlLCBvbGRMb2NhdGlvbik7XG4gIH1cbiAgdmFyIG9sZEF1eFVuaXQgPSBwYXJlbnROb2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbb2xkTG9jYXRpb25dO1xuICB2YXIgZGVsZXRlVW5pdHMgPSBvbGRBdXhVbml0LnVuaXRzO1xuXG4gIC8vRGVsZXRlIGZyb20gb2xkIGxvY2F0aW9uXG4gIHZhciBkZWxldGVJbmRleDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVVbml0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmKGRlbGV0ZVVuaXRzW2ldID09PSB1bml0KSB7XG4gICAgICBkZWxldGVJbmRleCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgZGVsZXRlVW5pdHMuc3BsaWNlKGRlbGV0ZUluZGV4LCAxKTtcbiAgLy9JZiBuZXcgaXMgbm90IGNvbnN0cnVjdGVkIGNvbnRydWN0IGludGVydmFsXG4gIGlmICghcGFyZW50Tm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW2xvY2F0aW9uXSkge1xuICAgIHBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl0gPSBBdXhVbml0TGF5b3V0LmNvbnN0cnVjdChwYXJlbnROb2RlLCBsb2NhdGlvbik7XG4gIH1cbiAgdmFyIGluc2VydEF1eFVuaXQgPSBpbnNlcnRVbml0cyA9IHBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl07XG4gIHZhciBpbnNlcnRVbml0cyA9IGluc2VydEF1eFVuaXQudW5pdHM7XG5cbiAgdmFyIGluZGV4ID0gMDtcbiAgLy9JbnNlcnQgaW50byBuZXcgdW5pdCBhcnJheVxuICBpZiAobG9jYXRpb24gPT09IFwidG9wXCIgfHwgbG9jYXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICB3aGlsZSAoIGluc2VydFVuaXRzW2luZGV4XSAhPT0gdW5kZWZpbmVkICYmIHBvc1ggPiBpbnNlcnRVbml0c1tpbmRleF0uYmJveC54KSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB3aGlsZSAoIGluc2VydFVuaXRzW2luZGV4XSAhPT0gdW5kZWZpbmVkICYmIHBvc1kgPiBpbnNlcnRVbml0c1tpbmRleF0uYmJveC55KSB7XG4gICAgICBpbmRleCsrO1xuICAgIH1cbiAgfVxuICBpbnNlcnRVbml0cy5zcGxpY2UoaW5kZXgsIDAsIHVuaXQpO1xufTtcblxuQXV4VW5pdExheW91dC5pc0VtcHR5ID0gZnVuY3Rpb24obWFpbk9iaikge1xuICByZXR1cm4gbWFpbk9iai51bml0cy5sZW5ndGggPT0gMDtcbn07XG5cbkF1eFVuaXRMYXlvdXQudW5pdENvdW50ID0gZnVuY3Rpb24obWFpbk9iaikge1xuICByZXR1cm4gbWFpbk9iai51bml0cy5sZW5ndGg7XG59O1xuXG5BdXhVbml0TGF5b3V0LnVuaXRMZW5ndGggPSBmdW5jdGlvbihtYWluT2JqKSB7XG4gIHZhciB1bml0cyA9IG1haW5PYmoudW5pdHM7XG4gIHZhciByaWdodE1vc3RQb2ludCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYm94ID0gdW5pdHNbaV0uYmJveDtcbiAgICBpZiAoYm94LnggKyBib3gudyAvIDIgPiByaWdodE1vc3RQb2ludCl7XG4gICAgICByaWdodE1vc3RQb2ludCA9IGJveC54ICsgYm94LncgLyAyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmlnaHRNb3N0UG9pbnQ7XG59O1xuXG4vL0dldCBVbml0IEdhcHNcbkF1eFVuaXRMYXlvdXQuZ2V0Q3VycmVudFRvcEdhcCA9IGZ1bmN0aW9uKCl7XG4gIHJldHVybiBBdXhVbml0TGF5b3V0LmN1cnJlbnRUb3BVbml0R2FwO1xufVxuXG5BdXhVbml0TGF5b3V0LmdldEN1cnJlbnRCb3R0b21HYXAgPSBmdW5jdGlvbigpe1xuICByZXR1cm4gQXV4VW5pdExheW91dC5jdXJyZW50Qm90dG9tVW5pdEdhcDtcbn1cblxuQXV4VW5pdExheW91dC5nZXRDdXJyZW50TGVmdEdhcCA9IGZ1bmN0aW9uKCl7XG4gIHJldHVybiBBdXhVbml0TGF5b3V0LmN1cnJlbnRMZWZ0VW5pdEdhcDtcbn1cblxuQXV4VW5pdExheW91dC5nZXRDdXJyZW50UmlnaHRHYXAgPSBmdW5jdGlvbigpe1xuICByZXR1cm4gQXV4VW5pdExheW91dC5jdXJyZW50UmlnaHRVbml0R2FwO1xufVxuXG4vKipcbiAqIEF1dG8gY2hvb3NlIHRoZSBuZXh0IGxheW91dC4gVG8gYWRkIGEgbmV3IGF1eCB1bml0LCBmb3IgZXhhbXBsZS5cbiAqL1xuQXV4VW5pdExheW91dC5zZWxlY3ROZXh0QXZhaWxhYmxlID0gZnVuY3Rpb24obm9kZSkge1xuICB2YXIgdG9wID0gbm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpLnRvcDtcbiAgdmFyIGJvdHRvbSA9IG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKS5ib3R0b207XG4gIHZhciByZXN1bHRMb2NhdGlvbiA9IFwidG9wXCI7XG4gIC8vIHN0YXJ0IGJ5IGFkZGluZyBvbiB0b3AgaWYgZnJlZVxuICBpZighdG9wIHx8IEF1eFVuaXRMYXlvdXQuaXNFbXB0eSh0b3ApKSB7XG4gICAgcmVzdWx0TG9jYXRpb24gPSBcInRvcFwiO1xuICB9XG4gIGVsc2UgaWYoIWJvdHRvbSB8fCBBdXhVbml0TGF5b3V0LmlzRW1wdHkoYm90dG9tKSkge1xuICAgIHJlc3VsdExvY2F0aW9uID0gXCJib3R0b21cIjtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyBjaG9vc2UgdGhlIHNpZGUgKHRvcCBvciBib3R0b20pIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSB0byB0aGUgcmlnaHQgb2YgdGhlIHJpZ2h0bW9zdCBpbmZvYm94XG4gICAgaWYoQXV4VW5pdExheW91dC51bml0TGVuZ3RoKHRvcCkgPD0gQXV4VW5pdExheW91dC51bml0TGVuZ3RoKGJvdHRvbSkpIHtcbiAgICAgIHJlc3VsdExvY2F0aW9uID0gXCJ0b3BcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXN1bHRMb2NhdGlvbiA9IFwiYm90dG9tXCI7XG4gICAgfVxuICB9XG4gIEF1eFVuaXRMYXlvdXQubGFzdFBvcyA9IHJlc3VsdExvY2F0aW9uOyAvL1NldCBsYXN0IHVzZWQgcG9zaXRpb25cbiAgcmV0dXJuIHJlc3VsdExvY2F0aW9uO1xufTtcblxuQXV4VW5pdExheW91dC5yZXNpemVQYXJlbnQgPSBmdW5jdGlvbiAobWFpbk9iaiwgY3ksIGxlbmd0aCkge1xuICB2YXIgcGFyZW50Tm9kZSA9IEF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZShtYWluT2JqLCBjeSk7XG4gIGlmKEF1eFVuaXRMYXlvdXQuaXNUb3JCKG1haW5PYmopKSB7XG4gICAgaWYocGFyZW50Tm9kZS5kYXRhKCdiYm94JykudyA8IGxlbmd0aCkge1xuICAgICAgY3kudHJpZ2dlcihcIm5vZGVlZGl0aW5nLnJlc2l6ZXN0YXJ0XCIsIFtcImNlbnRlcnJpZ2h0XCIsIHBhcmVudE5vZGVdKTtcbiAgICAgIHBhcmVudE5vZGUuZGF0YSgnYmJveCcpLncgPSBsZW5ndGg7XG4gICAgICBjeS50cmlnZ2VyKFwibm9kZWVkaXRpbmcucmVzaXplZW5kXCIsIFtcImNlbnRlcnJpZ2h0XCIsIHBhcmVudE5vZGVdKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYocGFyZW50Tm9kZS5kYXRhKCdiYm94JykuaCA8IGxlbmd0aCkge1xuICAgICAgY3kudHJpZ2dlcihcIm5vZGVlZGl0aW5nLnJlc2l6ZXN0YXJ0XCIsIFtcImJvdHRvbWNlbnRlclwiLCBwYXJlbnROb2RlXSk7XG4gICAgICBwYXJlbnROb2RlLmRhdGEoJ2Jib3gnKS5oID0gbGVuZ3RoO1xuICAgICAgY3kudHJpZ2dlcihcIm5vZGVlZGl0aW5nLnJlc2l6ZWVuZFwiLCBbXCJib3R0b21jZW50ZXJcIiwgcGFyZW50Tm9kZV0pO1xuICAgIH1cbiAgfVxufTtcblxuQXV4VW5pdExheW91dC5pc1RvckIgPSBmdW5jdGlvbiAobWFpbk9iaikge1xuICByZXR1cm4gbWFpbk9iai5sb2NhdGlvbiA9PSBcInRvcFwiIHx8IG1haW5PYmoubG9jYXRpb24gPT0gXCJib3R0b21cIjtcbn07XG5cbkF1eFVuaXRMYXlvdXQuaXNMb3JSID0gZnVuY3Rpb24gKG1haW5PYmopIHtcbiAgcmV0dXJuIG1haW5PYmoubG9jYXRpb24gPT0gXCJsZWZ0XCIgfHwgbWFpbk9iai5sb2NhdGlvbiA9PSBcInJpZ2h0XCI7XG59O1xuXG5BdXhVbml0TGF5b3V0LnNldFBhcmVudE1pbkxlbmd0aCA9IGZ1bmN0aW9uIChtYWluT2JqLCBjeSkge1xuICB2YXIgcGFyZW50Tm9kZSA9IEF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZShtYWluT2JqLCBjeSk7XG4gIHZhciBwYXJlbnRMYXlvdXRzID0gcGFyZW50Tm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpO1xuICBzd2l0Y2gobWFpbk9iai5sb2NhdGlvbikge1xuICAgIGNhc2UgXCJ0b3BcIjpcbiAgICAgIHZhciBjb21wYXJlVmFsID0gcGFyZW50TGF5b3V0cy5ib3R0b20gPyBwYXJlbnRMYXlvdXRzLmJvdHRvbS5sZW5ndGhVc2VkIDogMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgIHZhciBjb21wYXJlVmFsID0gcGFyZW50TGF5b3V0cy50b3AgPyBwYXJlbnRMYXlvdXRzLnRvcC5sZW5ndGhVc2VkIDogMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICB2YXIgY29tcGFyZVZhbCA9IHBhcmVudExheW91dHMucmlnaHQgPyBwYXJlbnRMYXlvdXRzLnJpZ2h0Lmxlbmd0aFVzZWQgOiAwO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICB2YXIgY29tcGFyZVZhbCA9IHBhcmVudExheW91dHMubGVmdCA/IHBhcmVudExheW91dHMubGVmdC5sZW5ndGhVc2VkIDogMDtcbiAgICAgIGJyZWFrO1xuICB9XG4gIGlmKEF1eFVuaXRMYXlvdXQuaXNUb3JCKG1haW5PYmopKSB7XG4gICAgcGFyZW50Tm9kZS5kYXRhKCdyZXNpemVNaW5XaWR0aCcsIE1hdGgubWF4KG1haW5PYmoubGVuZ3RoVXNlZCwgY29tcGFyZVZhbCkpO1xuICB9XG4gIGVsc2Uge1xuICAgIHBhcmVudE5vZGUuZGF0YSgncmVzaXplTWluSGVpZ2h0JywgTWF0aC5tYXgobWFpbk9iai5sZW5ndGhVc2VkLCBjb21wYXJlVmFsKSk7XG4gIH1cbn07XG5cbkF1eFVuaXRMYXlvdXQuZ2V0T3V0ZXJNYXJnaW4gPSBmdW5jdGlvbiAobWFpbk9iaikge1xuICBpZih0eXBlb2YgbWFpbk9iai5vdXRlck1hcmdpbiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtYWluT2JqLm91dGVyTWFyZ2luICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1haW5PYmoub3V0ZXJNYXJnaW47XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIEF1eFVuaXRMYXlvdXQub3V0ZXJNYXJnaW47XG4gIH1cbn07XG5cbkF1eFVuaXRMYXlvdXQuZ2V0VW5pdEdhcCA9IGZ1bmN0aW9uIChtYWluT2JqKSB7XG4gIGlmKHR5cGVvZiBtYWluT2JqLnVuaXRHYXAgIT09IFwidW5kZWZpbmVkXCIgJiYgbWFpbk9iai51bml0R2FwICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1haW5PYmoudW5pdEdhcDtcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gQXV4VW5pdExheW91dC51bml0R2FwO1xuICB9XG59O1xuXG5BdXhVbml0TGF5b3V0LmdldEFsd2F5c1Nob3dBdXhVbml0cyA9IGZ1bmN0aW9uIChtYWluT2JqKSB7XG4gIGlmKHR5cGVvZiBtYWluT2JqLmFsd2F5c1Nob3dBdXhVbml0cyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBtYWluT2JqLmFsd2F5c1Nob3dBdXhVbml0cyAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtYWluT2JqLmFsd2F5c1Nob3dBdXhVbml0cztcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gQXV4VW5pdExheW91dC5hbHdheXNTaG93QXV4VW5pdHM7XG4gIH1cbn07XG5cbkF1eFVuaXRMYXlvdXQuZ2V0TWF4VW5pdERpc3BsYXllZCA9IGZ1bmN0aW9uIChtYWluT2JqKSB7XG4gIGlmKHR5cGVvZiBtYWluT2JqLm1heFVuaXREaXNwbGF5ZWQgIT09IFwidW5kZWZpbmVkXCIgJiYgbWFpbk9iai5tYXhVbml0RGlzcGxheWVkICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIG1haW5PYmoubWF4VW5pdERpc3BsYXllZDtcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gQXV4VW5pdExheW91dC5tYXhVbml0RGlzcGxheWVkO1xuICB9XG59O1xuXG4vKlxuICogIER1cGxpY2F0ZSBhIGxheW91dC4gRG9lc24ndCBjb3B5IHRoZSB1bml0cyBhdHRyaWJ1dGUsIHJlc2V0IGl0IGluc3RlYWQuXG4gKi9cbkF1eFVuaXRMYXlvdXQuY29weSA9IGZ1bmN0aW9uKG1haW5PYmosIGN5LCBuZXdQYXJlbnQpIHtcbiAgdmFyIG5ld0xheW91dCA9IEF1eFVuaXRMYXlvdXQuY29uc3RydWN0KG5ld1BhcmVudCk7XG4gIC8vIENvcHlpbmcgdGhlIHNhbWUgcmVmZXJlbmNlIHRvIHVuaXRzIHdvdWxkIGJlIGluY29uc2lzdGVudC5cbiAgLy8gRHVwbGljYXRpbmcgb3duZWQgdW5pdHMgZ29lcyBiZXlvbm5kIHRoZSBzY29wZSwgYmVjYXVzZSB3ZSBuZWVkIHRvIGFzc2lnblxuICAvLyBpZHMgdGhhdCBhcmUgdGllZCB0byB0aGUgZ2xvYmFsIGNvdW5kIG9mIHVuaXRzIG9mIGEgbm9kZS5cbiAgLy8gU28gZHVwbGljYXRpbmcgdW5pdHMgaXMgc29tZXRoaW5nIHRoYXQgc2hvdWxkIGJlIHByb3Blcmx5IGRvbmUgb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLlxuICAvLyBUT0RPIHRoYXQgaXMgYSBiaXQgZGlydHksIGZpbmQgYSBuaWNlIG1vZHVsYXIgd2F5IHRvIGFycmFuZ2UgdGhhdFxuICBuZXdMYXlvdXQudW5pdHMgPSBbXTtcbiAgbmV3TGF5b3V0LmxvY2F0aW9uID0gbWFpbk9iai5sb2NhdGlvbjtcbiAgbmV3TGF5b3V0LmFsaWdubWVudCA9IG1haW5PYmouYWxpZ25tZW50O1xuICBBdXhVbml0TGF5b3V0LnNldFBhcmVudE5vZGVSZWYobmV3TGF5b3V0LCBuZXdQYXJlbnQpO1xuICBuZXdMYXlvdXQucmVuZGVyTGVuZ3RoQ2FjaGUgPSBtYWluT2JqLnJlbmRlckxlbmd0aENhY2hlO1xuICBuZXdMYXlvdXQubGVuZ3RoVXNlZCA9IG1haW5PYmoubGVuZ3RoVXNlZDtcbiAgaWYodHlwZW9mIG1haW5PYmoub3V0ZXJNYXJnaW4gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBuZXdMYXlvdXQub3V0ZXJNYXJnaW4gPSBtYWluT2JqLm91dGVyTWFyZ2luO1xuICB9XG4gIGlmKHR5cGVvZiBtYWluT2JqLnVuaXRHYXAgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBuZXdMYXlvdXQudW5pdEdhcCA9IG1haW5PYmoudW5pdEdhcDtcbiAgfVxuICBpZih0eXBlb2YgbWFpbk9iai5hbHdheXNTaG93QXV4VW5pdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBuZXdMYXlvdXQuYWx3YXlzU2hvd0F1eFVuaXRzID0gbWFpbk9iai5hbHdheXNTaG93QXV4VW5pdHM7XG4gIH1cbiAgaWYodHlwZW9mIG1haW5PYmoubWF4VW5pdERpc3BsYXllZCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG5ld0xheW91dC5tYXhVbml0RGlzcGxheWVkID0gbWFpbk9iai5tYXhVbml0RGlzcGxheWVkO1xuICB9XG4gIHJldHVybiBuZXdMYXlvdXQ7XG59O1xuXG5ucy5BdXhVbml0TGF5b3V0ID0gQXV4VW5pdExheW91dDtcbi8vIC0tLS0tLS0tLS0tLS0tIEVORCBBdXhVbml0TGF5b3V0IC0tLS0tLS0tLS0tLS0tIC8vXG5cbm1vZHVsZS5leHBvcnRzID0gbnM7XG4iLCIvKlxuICogQ29tbW9uIHV0aWxpdGllcyBmb3IgZWxlbWVudHMgaW5jbHVkZXMgYm90aCBnZW5lcmFsIHV0aWxpdGllcyBhbmQgc2JnbiBzcGVjaWZpYyB1dGlsaXRpZXNcbiAqL1xuXG52YXIgbGliVXRpbGl0aWVzID0gcmVxdWlyZSgnLi9saWItdXRpbGl0aWVzJyk7XG52YXIgdGV4dFV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdGV4dC11dGlsaXRpZXMnKTtcbnZhciBsaWJzID0gbGliVXRpbGl0aWVzLmdldExpYnMoKTtcbnZhciBqUXVlcnkgPSAkID0gbGlicy5qUXVlcnk7XG52YXIgY2xhc3NlcyA9IHJlcXVpcmUoJy4vY2xhc3NlcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25VdGlsaXRpZXMsIGdyYXBoVXRpbGl0aWVzO1xuICB2YXIgb3B0aW9ucztcbiAgdmFyIGN5O1xuXG4gIGZ1bmN0aW9uIGVsZW1lbnRVdGlsaXRpZXMgKHBhcmFtKSB7XG4gICAgLy8gSW5pdCBwYXJhbXMgdG8gYmUgYWNjZXNzZWQgYnkgZWxlbWVudFV0aWxpdGllc1xuICAgIG9wdGlvblV0aWxpdGllcyA9IHBhcmFtLm9wdGlvblV0aWxpdGllcztcbiAgICBvcHRpb25zID0gb3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiAgICBncmFwaFV0aWxpdGllcyA9IHBhcmFtLmdyYXBoVXRpbGl0aWVzO1xuICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgfVxuXG4gIHZhciBpbkFycmF5ID0gZnVuY3Rpb24oIHZhbHVlLCBhcnIgKSB7XG4gICAgcmV0dXJuICQuaW5BcnJheSggdmFsdWUsIGFyciApICE9PSAtMTtcbiAgfTtcblxuICAvLyBpbml0aWFsaXplIG1hcCB0eXBlXG4gIGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSA9ICdQRCc7XG4gIGVsZW1lbnRVdGlsaXRpZXMuZmlsZUZvcm1hdCA9IHVuZGVmaW5lZDtcblxuICBlbGVtZW50VXRpbGl0aWVzLlBEID0ge307IC8vIG5hbWVzcGFjZSBmb3IgYWxsIFBEIHNwZWNpZmljIHN0dWZmXG4gIGVsZW1lbnRVdGlsaXRpZXMuQUYgPSB7fTsgLy8gbmFtZXNwYWNlIGZvciBhbGwgQUYgc3BlY2lmaWMgc3R1ZmZcbiAgZWxlbWVudFV0aWxpdGllcy5TSUYgPSB7fTsgLy8gbmFtZXNwYWNlIGZvciBhbGwgU0lGIHNwZWNpZmljIHN0dWZmXG5cbiAgZWxlbWVudFV0aWxpdGllcy5ncmFwaFRvcG9sb2d5TG9ja2VkID0gZmFsc2U7XG5cbiAgLy8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzg4MDk0NzJcbiAgLy8gd2UgbmVlZCB0byB0YWtlIGNhcmUgb2Ygb3VyIG93biBJRHMgYmVjYXVzZSB0aGUgb25lcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjeXRvc2NhcGUgKGFsc28gVVVJRClcbiAgLy8gZG9uJ3QgY29tcGx5IHdpdGggeHNkOlNJRCB0eXBlIHRoYXQgbXVzdCBub3QgYmVnaW4gd2l0aCBhIG51bWJlclxuICBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlVVVJRCA9IGZ1bmN0aW9uICgpIHsgLy8gUHVibGljIERvbWFpbi9NSVRcbiAgICAgIHZhciBkID0gRGF0ZS5ub3coKTtcbiAgICAgIGlmICh0eXBlb2YgcGVyZm9ybWFuY2UgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicpe1xuICAgICAgICAgIGQgKz0gcGVyZm9ybWFuY2Uubm93KCk7IC8vdXNlIGhpZ2gtcHJlY2lzaW9uIHRpbWVyIGlmIGF2YWlsYWJsZVxuICAgICAgfVxuICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICB2YXIgciA9IChkICsgTWF0aC5yYW5kb20oKSAqIDE2KSAlIDE2IHwgMDtcbiAgICAgICAgICBkID0gTWF0aC5mbG9vcihkIC8gMTYpO1xuICAgICAgICAgIHJldHVybiAoYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KSkudG9TdHJpbmcoMTYpO1xuICAgICAgfSk7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZU5vZGVJZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnbnd0Tl8nICsgZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZVVVSUQoKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlRWRnZUlkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdud3RFXycgKyBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlVVVJRCgpO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVTdGF0ZVZhcklkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdud3RTVl8nICsgZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZVVVSUQoKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlVW5pdE9mSW5mb0lkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICdud3RVT0lfJyArIGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVVVUlEKCk7XG4gIH07XG5cbiAgLypcbiAgICBzZWUgaHR0cDovL2pvdXJuYWwuaW1iaW8uZGUvYXJ0aWNsZXMvcGRmL2ppYi0yNjMucGRmIHAuNDEgPC0tIGJ1dCBiZXdhcmUsIG91dGRhdGVkXG4gICAgZm9sbG93aW5nIHRhYmxlcyBoYXZlIGJlZW4gdXBkYXRlZCB3aXRoIFBEIGx2bDEgdjIuMCBvZiBOb3ZlbWJlciA3LCAyMDE2IHdvcmtpbmcgZHJhZnRcbiAgICBvbmx5IHRoZSBmb2xsb3dpbmcgdGhpbmdzIGhhdmUgYmVlbiBjaGFuZ2VkIGZyb20gMi4wICh0aGlzIHZlcnNpb24gaXMgbm90IGNsZWFyIG9uIGNvbm5lY3Rpdml0eSk6XG4gICAgIC0gZW1wdHkgc2V0IGhhcyBubyBsaW1pdCBvbiBpdHMgZWRnZSBjb3VudFxuICAgICAtIGxvZ2ljIG9wZXJhdG9ycyBjYW4gYmUgc291cmNlIGFuZCB0YXJnZXRcbiAgICAgLSBsaW1pdCBvZiAxIGNhdGFseXNpcyBhbmQgMSBuZWNlc3Nhcnkgc3RpbXVsYXRpb24gb24gYSBwcm9jZXNzXG5cbiAgICBmb3IgZWFjaCBlZGdlIGNsYXNzIGFuZCBub2RlY2xhc3MgZGVmaW5lIDIgY2FzZXM6XG4gICAgIC0gbm9kZSBjYW4gYmUgYSBzb3VyY2Ugb2YgdGhpcyBlZGdlIC0+IGFzU291cmNlXG4gICAgIC0gbm9kZSBjYW4gYmUgYSB0YXJnZXQgb2YgdGhpcyBlZGdlIC0+IGFzVGFyZ2V0XG4gICAgZm9yIGJvdGggY2FzZXMsIHRlbGxzIGlmIGl0IGlzIGFsbG93ZWQgYW5kIHdoYXQgaXMgdGhlIGxpbWl0IG9mIGVkZ2VzIGFsbG93ZWQuXG4gICAgTGltaXRzIGNhbiBjb25jZXJuIG9ubHkgdGhpcyB0eXBlIG9mIGVkZ2UgKG1heEVkZ2UpIG9yIHRoZSB0b3RhbCBudW1iZXIgb2YgZWRnZXMgZm9yIHRoaXMgbm9kZSAobWF4VG90YWwpLlxuICAgIENvbnNpZGVyIHVuZGVmaW5lZCB0aGluZ3MgYXMgZmFsc2UvdW5hbGxvd2VkIC0+IHdoaXRlbGlzdCBiZWhhdmlvci5cblxuICAgIHRoZSBub2Rlcy9lZGdlcyBjbGFzcyBsaXN0ZWQgYmVsb3cgYXJlIHRob3NlIHVzZWQgaW4gdGhlIHByb2dyYW0uXG4gICAgRm9yIGluc3RhbmNlIFwiY29tcGFydG1lbnRcIiBpc24ndCBhIG5vZGUgaW4gU0JHTiBzcGVjcy5cbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5QRC5jb25uZWN0aXZpdHlDb25zdHJhaW50cyA9IHtcbiAgICBcImNvbnN1bXB0aW9uXCI6IHtcbiAgICAgIFwibWFjcm9tb2xlY3VsZVwiOiAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic2ltcGxlIGNoZW1pY2FsXCI6ICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidW5zcGVjaWZpZWQgZW50aXR5XCI6ICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGxleFwiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInNvdXJjZSBhbmQgc2lua1wiOiAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInBlcnR1cmJpbmcgYWdlbnRcIjogICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwcm9jZXNzXCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIm9taXR0ZWQgcHJvY2Vzc1wiOiAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwidW5jZXJ0YWluIHByb2Nlc3NcIjogICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFzc29jaWF0aW9uXCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiZGlzc29jaWF0aW9uXCI6ICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm5vdFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJwcm9kdWN0aW9uXCI6IHtcbiAgICAgIFwibWFjcm9tb2xlY3VsZVwiOiAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJzaW1wbGUgY2hlbWljYWxcIjogICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInVuc3BlY2lmaWVkIGVudGl0eVwiOiAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiY29tcGxleFwiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcImNvbXBhcnRtZW50XCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzb3VyY2UgYW5kIHNpbmtcIjogICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInBlcnR1cmJpbmcgYWdlbnRcIjogICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwcm9jZXNzXCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvbWl0dGVkIHByb2Nlc3NcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bmNlcnRhaW4gcHJvY2Vzc1wiOiAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFzc29jaWF0aW9uXCI6ICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRpc3NvY2lhdGlvblwiOiAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwibW9kdWxhdGlvblwiOiB7XG4gICAgICBcIm1hY3JvbW9sZWN1bGVcIjogICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInVuc3BlY2lmaWVkIGVudGl0eVwiOiAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBsZXhcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBhcnRtZW50XCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzb3VyY2UgYW5kIHNpbmtcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwZXJ0dXJiaW5nIGFnZW50XCI6ICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzdWJtYXBcIjogICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInByb2Nlc3NcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwib21pdHRlZCBwcm9jZXNzXCI6ICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJ1bmNlcnRhaW4gcHJvY2Vzc1wiOiAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInBoZW5vdHlwZVwiOiAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiYXNzb2NpYXRpb25cIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJkaXNzb2NpYXRpb25cIjogICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm9yXCI6ICAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm5vdFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwic3RpbXVsYXRpb25cIjoge1xuICAgICAgXCJtYWNyb21vbGVjdWxlXCI6ICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzaW1wbGUgY2hlbWljYWxcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bnNwZWNpZmllZCBlbnRpdHlcIjogICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wbGV4XCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic291cmNlIGFuZCBzaW5rXCI6ICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGVydHVyYmluZyBhZ2VudFwiOiAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwcm9jZXNzXCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIm9taXR0ZWQgcHJvY2Vzc1wiOiAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwidW5jZXJ0YWluIHByb2Nlc3NcIjogICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcImFzc29jaWF0aW9uXCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGlzc29jaWF0aW9uXCI6ICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImNhdGFseXNpc1wiOiB7XG4gICAgICBcIm1hY3JvbW9sZWN1bGVcIjogICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInVuc3BlY2lmaWVkIGVudGl0eVwiOiAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBsZXhcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInNvdXJjZSBhbmQgc2lua1wiOiAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInBlcnR1cmJpbmcgYWdlbnRcIjogICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwcm9jZXNzXCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxfX0sXG4gICAgICBcIm9taXR0ZWQgcHJvY2Vzc1wiOiAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDF9fSxcbiAgICAgIFwidW5jZXJ0YWluIHByb2Nlc3NcIjogICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxfX0sXG4gICAgICBcImFzc29jaWF0aW9uXCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGlzc29jaWF0aW9uXCI6ICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImluaGliaXRpb25cIjoge1xuICAgICAgXCJtYWNyb21vbGVjdWxlXCI6ICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzaW1wbGUgY2hlbWljYWxcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bnNwZWNpZmllZCBlbnRpdHlcIjogICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wbGV4XCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic291cmNlIGFuZCBzaW5rXCI6ICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGVydHVyYmluZyBhZ2VudFwiOiAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwcm9jZXNzXCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIm9taXR0ZWQgcHJvY2Vzc1wiOiAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwidW5jZXJ0YWluIHByb2Nlc3NcIjogICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcImFzc29jaWF0aW9uXCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGlzc29jaWF0aW9uXCI6ICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcIm5lY2Vzc2FyeSBzdGltdWxhdGlvblwiOiB7XG4gICAgICBcIm1hY3JvbW9sZWN1bGVcIjogICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInVuc3BlY2lmaWVkIGVudGl0eVwiOiAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBsZXhcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBhcnRtZW50XCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzb3VyY2UgYW5kIHNpbmtcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwZXJ0dXJiaW5nIGFnZW50XCI6ICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzdWJtYXBcIjogICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInByb2Nlc3NcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDF9fSxcbiAgICAgIFwib21pdHRlZCBwcm9jZXNzXCI6ICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMX19LFxuICAgICAgXCJ1bmNlcnRhaW4gcHJvY2Vzc1wiOiAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxfX0sXG4gICAgICBcInBoZW5vdHlwZVwiOiAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDF9fSxcbiAgICAgIFwiYXNzb2NpYXRpb25cIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJkaXNzb2NpYXRpb25cIjogICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm9yXCI6ICAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm5vdFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgfSxcbiAgICBcImxvZ2ljIGFyY1wiOiB7XG4gICAgICBcIm1hY3JvbW9sZWN1bGVcIjogICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInVuc3BlY2lmaWVkIGVudGl0eVwiOiAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBsZXhcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBhcnRtZW50XCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzb3VyY2UgYW5kIHNpbmtcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwZXJ0dXJiaW5nIGFnZW50XCI6ICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicHJvY2Vzc1wiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvbWl0dGVkIHByb2Nlc3NcIjogICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInVuY2VydGFpbiBwcm9jZXNzXCI6ICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhc3NvY2lhdGlvblwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRpc3NvY2lhdGlvblwiOiAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfX0sXG4gICAgfSxcbiAgICBcImVxdWl2YWxlbmNlIGFyY1wiOiB7XG4gICAgICBcIm1hY3JvbW9sZWN1bGVcIjogICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic2ltcGxlIGNoZW1pY2FsXCI6ICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bnNwZWNpZmllZCBlbnRpdHlcIjogICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBsZXhcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwic291cmNlIGFuZCBzaW5rXCI6ICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwZXJ0dXJiaW5nIGFnZW50XCI6ICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwicHJvY2Vzc1wiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvbWl0dGVkIHByb2Nlc3NcIjogICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInVuY2VydGFpbiBwcm9jZXNzXCI6ICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhc3NvY2lhdGlvblwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRpc3NvY2lhdGlvblwiOiAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm5vdFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH1cbiAgfTtcblxuICAvKiBBRiBub2RlIGNvbm5lY3Rpdml0eSBydWxlc1xuICAgKiBTZWU6IFN5c3RlbXMgQmlvbG9neSBHcmFwaGljYWwgTm90YXRpb246IEFjdGl2aXR5IEZsb3cgbGFuZ3VhZ2UgTGV2ZWwgMSwgVmVyc2lvbiAxLjIsIERhdGU6IEp1bHkgMjcsIDIwMTVcbiAgICogICBTZWN0aW9uIDMuMy4xOiBBY3Rpdml0eSBOb2RlcyBjb25uZWN0aXZpdHkgZGVmaW5pdGlvblxuICAgKiAgIFVSTDogaHR0cHM6Ly9kb2kub3JnLzEwLjIzOTAvYmllY29sbC1qaWItMjAxNS0yNjVcbiAgICovXG4gIGVsZW1lbnRVdGlsaXRpZXMuQUYuY29ubmVjdGl2aXR5Q29uc3RyYWludHMgPSB7XG4gICAgXCJwb3NpdGl2ZSBpbmZsdWVuY2VcIjoge1xuICAgICAgXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI6ICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInBoZW5vdHlwZVwiOiAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzdWJtYXBcIjogICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm9yXCI6ICAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm5vdFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRlbGF5XCI6ICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBhcnRtZW50XCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICB9LFxuICAgIFwibmVnYXRpdmUgaW5mbHVlbmNlXCI6IHtcbiAgICAgIFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiOiAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJkZWxheVwiOiAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgfSxcbiAgICBcInVua25vd24gaW5mbHVlbmNlXCI6IHtcbiAgICAgIFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiOiAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJkZWxheVwiOiAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgfSxcbiAgICBcIm5lY2Vzc2FyeSBzdGltdWxhdGlvblwiOiB7XG4gICAgICBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjogIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGVsYXlcIjogICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgIH0sXG4gICAgXCJsb2dpYyBhcmNcIjoge1xuICAgICAgXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI6ICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInBoZW5vdHlwZVwiOiAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzdWJtYXBcIjogICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX19LFxuICAgICAgXCJkZWxheVwiOiAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX19LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgfSxcbiAgICBcImVxdWl2YWxlbmNlIGFyY1wiOiB7XG4gICAgICBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjogIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm5vdFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGVsYXlcIjogICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgfSxcbiAgfVxuXG4gIGVsZW1lbnRVdGlsaXRpZXMuU0lGLmNvbm5lY3Rpdml0eUNvbnN0cmFpbnRzID0ge1xuICAgIFwiY29udHJvbHMtc3RhdGUtY2hhbmdlLW9mXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJjb250cm9scy10cmFuc3BvcnQtb2ZcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImNvbnRyb2xzLXBob3NwaG9yeWxhdGlvbi1vZlwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiY29udHJvbHMtZXhwcmVzc2lvbi1vZlwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiY2F0YWx5c2lzLXByZWNlZGVzXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJpbi1jb21wbGV4LXdpdGhcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImludGVyYWN0cy13aXRoXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJuZWlnaGJvci1vZlwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiY29uc3VtcHRpb24tY29udHJvbGVkLWJ5XCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJjb250cm9scy1wcm9kdWN0aW9uLW9mXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fVxuICAgIH0sXG4gICAgXCJjb250cm9scy10cmFuc3BvcnQtb2YtY2hlbWljYWxcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19XG4gICAgfSxcbiAgICBcImNoZW1pY2FsLWFmZmVjdHNcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcInJlYWN0cy13aXRoXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fVxuICAgIH0sXG4gICAgXCJ1c2VkLXRvLXByb2R1Y2VcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19XG4gICAgfSxcbiAgICBcImFjdGl2YXRlc1wiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiaW5oaWJpdHNcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcInBob3NwaG9yeWxhdGVzXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJkZXBob3NwaG9yeWxhdGVzXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJ1cHJlZ3VsYXRlcy1leHByZXNzaW9uXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJkb3ducmVndWxhdGVzLWV4cHJlc3Npb25cIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImFjdGl2YXRlcy1ndHBhc2VcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImluaGliaXRzLWd0cGFzZVwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiYWNldHlsYXRlc1wiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiZGVhY2V0eWxhdGVzXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJtZXRoeWxhdGVzXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJkZW1ldGh5bGF0ZXNcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcblxuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMubG9naWNhbE9wZXJhdG9yVHlwZXMgPSBbJ2FuZCcsICdvcicsICdub3QnLCAnZGVsYXknXTtcbiAgZWxlbWVudFV0aWxpdGllcy5wcm9jZXNzVHlwZXMgPSBbJ3Byb2Nlc3MnLCAnb21pdHRlZCBwcm9jZXNzJywgJ3VuY2VydGFpbiBwcm9jZXNzJyxcbiAgICAnYXNzb2NpYXRpb24nLCAnZGlzc29jaWF0aW9uJywgJ3BoZW5vdHlwZSddO1xuICBlbGVtZW50VXRpbGl0aWVzLmJpb2xvZ2ljYWxBY3Rpdml0eVR5cGVzID0gWydiaW9sb2dpY2FsIGFjdGl2aXR5JywgJ0JBIHBsYWluJywgJ0JBIHVuc3BlY2lmaWVkIGVudGl0eScsXG4gICAgJ0JBIHNpbXBsZSBjaGVtaWNhbCcsICdCQSBtYWNyb21vbGVjdWxlJywgJ0JBIG51Y2xlaWMgYWNpZCBmZWF0dXJlJyxcbiAgICAnQkEgcGVydHVyYmluZyBhZ2VudCcsICdCQSBjb21wbGV4J107XG4gIGVsZW1lbnRVdGlsaXRpZXMuZXBuVHlwZXMgPSBbJ21hY3JvbW9sZWN1bGUnLCAnbnVjbGVpYyBhY2lkIGZlYXR1cmUnLCAnc2ltcGxlIGNoZW1pY2FsJyxcbiAgICAnc291cmNlIGFuZCBzaW5rJywgJ3Vuc3BlY2lmaWVkIGVudGl0eScsICdwZXJ0dXJiaW5nIGFnZW50JywgJ2NvbXBsZXgnLCBcbiAgICAnbnVjbGVpYyBhY2lkIGZlYXR1cmUgbXVsdGltZXInLCAnbWFjcm9tb2xlY3VsZSBtdWx0aW1lcicsICdzaW1wbGUgY2hlbWljYWwgbXVsdGltZXInLCAnY29tcGxleCBtdWx0aW1lciddO1xuICBlbGVtZW50VXRpbGl0aWVzLnNpZlR5cGVzID0gWydTSUYgbWFjcm9tb2xlY3VsZScsICdTSUYgc2ltcGxlIGNoZW1pY2FsJ107XG4gIGVsZW1lbnRVdGlsaXRpZXMub3RoZXJOb2RlVHlwZXMgPSBbJ2NvbXBhcnRtZW50JywgJ3RhZycsICdzdWJtYXAnLCAndG9wb2xvZ3kgZ3JvdXAnXTtcblxuICBlbGVtZW50VXRpbGl0aWVzLm5vZGVUeXBlcyA9IGVsZW1lbnRVdGlsaXRpZXMuZXBuVHlwZXNcbiAgICAuY29uY2F0KCBlbGVtZW50VXRpbGl0aWVzLmxvZ2ljYWxPcGVyYXRvclR5cGVzIClcbiAgICAuY29uY2F0KCBlbGVtZW50VXRpbGl0aWVzLnByb2Nlc3NUeXBlcyApXG4gICAgLmNvbmNhdCggZWxlbWVudFV0aWxpdGllcy5iaW9sb2dpY2FsQWN0aXZpdHlUeXBlcyApXG4gICAgLmNvbmNhdCggZWxlbWVudFV0aWxpdGllcy5zaWZUeXBlcyApXG4gICAgLmNvbmNhdCggZWxlbWVudFV0aWxpdGllcy5vdGhlck5vZGVUeXBlcyApO1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuY29tcG91bmROb2RlVHlwZXMgPSBbJ2NvbXBsZXgnLCAnY29tcGFydG1lbnQnLCAnc3VibWFwJ107XG5cbiAgZWxlbWVudFV0aWxpdGllcy5zaW1wbGVOb2RlVHlwZXMgPSAkKGVsZW1lbnRVdGlsaXRpZXMubm9kZVR5cGVzKVxuICAgIC5ub3QoZWxlbWVudFV0aWxpdGllcy5jb21wb3VuZE5vZGVUeXBlcykuZ2V0KCk7XG5cbiAgZWxlbWVudFV0aWxpdGllcy5zaWZFZGdlVHlwZXMgPSBbJ25laWdoYm9yLW9mJywgJ2ludGVyYWN0cy13aXRoJywgJ2luLWNvbXBsZXgtd2l0aCcsXG4gICAgJ2NvbnRyb2xzLXN0YXRlLWNoYW5nZS1vZicsICdjb250cm9scy10cmFuc3BvcnQtb2YnLCAnY29udHJvbHMtcGhvc3Bob3J5bGF0aW9uLW9mJyxcbiAgICAnY2F0YWx5c2lzLXByZWNlZGVzJywgJ2NvbnRyb2xzLWV4cHJlc3Npb24tb2YnLCAnY29uc3VtcHRpb24tY29udHJvbGVkLWJ5JyxcbiAgICAnY29udHJvbHMtcHJvZHVjdGlvbi1vZicsICdjb250cm9scy10cmFuc3BvcnQtb2YtY2hlbWljYWwnLCAnY2hlbWljYWwtYWZmZWN0cycsXG4gICAgJ3JlYWN0cy13aXRoJywgJ3VzZWQtdG8tcHJvZHVjZScsICdwaG9zcGhvcnlsYXRlcycsICdkZXBob3NwaG9yeWxhdGVzJyxcbiAgICAndXByZWd1bGF0ZXMtZXhwcmVzc2lvbicsICdkb3ducmVndWxhdGVzLWV4cHJlc3Npb24nLCAnYWN0aXZhdGVzJywgJ2luaGliaXRzJyxcbiAgICAnYWN0aXZhdGVzLWd0cGFzZScsICdpbmhpYml0cy1ndHBhc2UnLCAnYWNldHlsYXRlcycsICdkZWFjZXR5bGF0ZXMnLFxuICAgICdtZXRoeWxhdGVzJywgJ2RlbWV0aHlsYXRlcyddO1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZWRnZVR5cGVzID0gWydjb25zdW1wdGlvbicsICdwcm9kdWN0aW9uJywgJ21vZHVsYXRpb24nLFxuICAgICdzdGltdWxhdGlvbicsICdjYXRhbHlzaXMnLCAnaW5oaWJpdGlvbicsICduZWNlc3Nhcnkgc3RpbXVsYXRpb24nLFxuICAgICdsb2dpYyBhcmMnLCAnZXF1aXZhbGVuY2UgYXJjJywgJ3Vua25vd24gaW5mbHVlbmNlJywgJ3Bvc2l0aXZlIGluZmx1ZW5jZScsXG4gICAgJ25lZ2F0aXZlIGluZmx1ZW5jZScsICdjb250cm9scy1zdGF0ZS1jaGFuZ2Utb2YnLFxuICAgICdjb250cm9scy10cmFuc3BvcnQtb2YnLCAnY29udHJvbHMtcGhvc3Bob3J5bGF0aW9uLW9mJyxcbiAgICAnY29udHJvbHMtZXhwcmVzc2lvbi1vZicsICdjYXRhbHlzaXMtcHJlY2VkZXMnLCAnaW4tY29tcGxleC13aXRoJyxcbiAgICAnaW50ZXJhY3RzLXdpdGgnLCAnbmVpZ2hib3Itb2YnLCAnY29uc3VtcHRpb24tY29udHJvbGVkLWJ5JyxcbiAgICAnY29udHJvbHMtcHJvZHVjdGlvbi1vZicsICdjb250cm9scy10cmFuc3BvcnQtb2YtY2hlbWljYWwnLFxuICAgICdjaGVtaWNhbC1hZmZlY3RzJywgJ3JlYWN0cy13aXRoJywgJ3VzZWQtdG8tcHJvZHVjZScsXG4gICAgJ2FjdGl2YXRlcycsICdpbmhpYml0cycsICdwaG9zcGhvcnlsYXRlcycsICdkZXBob3NwaG9yeWxhdGVzJyxcbiAgICAndXByZWd1bGF0ZXMtZXhwcmVzc2lvbicsICdkb3ducmVndWxhdGVzLWV4cHJlc3Npb24nLCAnYWN0aXZhdGVzLWd0cGFzZScsXG4gICAgJ2luaGliaXRzLWd0cGFzZScsICdhY2V0eWxhdGVzJywgJ2RlYWNldHlsYXRlcycsICdtZXRoeWxhdGVzJywgJ2RlbWV0aHlsYXRlcydcbiAgXTtcblxuICBlbGVtZW50VXRpbGl0aWVzLnVuZGlyZWN0ZWRFZGdlVHlwZXMgPSBbJ2luLWNvbXBsZXgtd2l0aCcsICdpbnRlcmFjdHMtd2l0aCcsXG4gICAgJ25laWdoYm9yLW9mJywgJ2xvZ2ljIGFyYycsICdlcXVpdmFsZW5jZSBhcmMnXTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmVsZW1lbnRUeXBlcyA9IGVsZW1lbnRVdGlsaXRpZXMubm9kZVR5cGVzXG4gICAgLmNvbmNhdCggZWxlbWVudFV0aWxpdGllcy5lZGdlVHlwZXMgKTtcblxuICAvKlxuICAqIEdldCBzYmduY2xhc3Mgb2YgdGhlIGdpdmVuIGVsZW1lbnQuIElmIHRoZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcgcmV0dXJuIGl0XG4gICogYnkgYXNzdW1pbmcgdGhhdCBpdCBpcyB0aGUgc2JnbmNsYXNzIGl0c2VsZi5cbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRTYmduQ2xhc3MgPSBmdW5jdGlvbiggZWxlICkge1xuICAgIGlmICggZWxlID09IG51bGwgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgc2JnbmNsYXNzID0gdHlwZW9mIGVsZSA9PT0gJ3N0cmluZycgPyBlbGUgOiBlbGUuZGF0YSgnY2xhc3MnKTtcblxuICAgIHJldHVybiBzYmduY2xhc3M7XG4gIH07XG5cbiAgLypcbiAgKiBHZXQgc2JnbiBjbGFzcyBvbWl0dGluZyB0aGUgbXVsdGltZXIgaW5mb3JtYXRpb25cbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzID0gZnVuY3Rpb24oIGVsZSApIHtcbiAgICBpZiAoIGVsZSA9PSBudWxsICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0U2JnbkNsYXNzKCBlbGUgKS5yZXBsYWNlKCAnIG11bHRpbWVyJywgJycgKTtcbiAgfTtcblxuICAvKlxuICAgKiBSZXR1cm5zIGlmIHRoZSBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiBwYXJlbnQgY2xhc3MgY2FuIGJlIHBhcmVudCBvZiB0aGUgZWxlbWVudHMgd2l0aCB0aGUgZ2l2ZW4gbm9kZSBjbGFzc1xuICAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5pc1ZhbGlkUGFyZW50ID0gZnVuY3Rpb24oX25vZGVDbGFzcywgX3BhcmVudENsYXNzLCBub2RlKSB7XG4gICAgLy8gSWYgbm9kZUNsYXNzIGFuZCBwYXJlbnRDbGFzcyBwYXJhbXMgYXJlIGVsZW1lbnRzIGl0c2VsdmVzIGluc3RlYWQgb2YgdGhlaXIgY2xhc3MgbmFtZXMgaGFuZGxlIGl0XG4gICAgdmFyIG5vZGVDbGFzcyA9IHR5cGVvZiBfbm9kZUNsYXNzICE9PSAnc3RyaW5nJyA/IF9ub2RlQ2xhc3MuZGF0YSgnY2xhc3MnKSA6IF9ub2RlQ2xhc3M7XG4gICAgdmFyIHBhcmVudENsYXNzID0gX3BhcmVudENsYXNzICE9IHVuZGVmaW5lZCAmJiB0eXBlb2YgX3BhcmVudENsYXNzICE9PSAnc3RyaW5nJyA/IF9wYXJlbnRDbGFzcy5kYXRhKCdjbGFzcycpIDogX3BhcmVudENsYXNzO1xuXG4gICAgaWYgKHBhcmVudENsYXNzID09IHVuZGVmaW5lZCB8fCBwYXJlbnRDbGFzcyA9PT0gJ2NvbXBhcnRtZW50J1xuICAgICAgICAgICAgfHwgcGFyZW50Q2xhc3MgPT09ICdzdWJtYXAnKSB7IC8vIENvbXBhcnRtZW50cywgc3VibWFwcyBhbmQgdGhlIHJvb3QgY2FuIGluY2x1ZGUgYW55IHR5cGUgb2Ygbm9kZXNcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChwYXJlbnRDbGFzcy5zdGFydHNXaXRoKCdjb21wbGV4JykgJiYgKCFub2RlIHx8IG5vZGUuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGggPT0gMCAgLy8gQ29tcGxleGVzIGNhbiBvbmx5IGluY2x1ZGUgRVBOcyB3aGljaCBkbyBub3QgaGF2ZSBlZGdlc1xuICAgICAgICAgICAgfHwgZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlID09IFwiSHlicmlkQW55XCIgfHxlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgPT0gXCJIeWJyaWRTYmduXCIpKSB7IC8vIFdoZW4gbWFwIHR5cGUgaXMgdW5rbm93biwgYWxsb3cgY29tcGxleGVzIHRvIGluY2x1ZGUgRVBOcyB3aXRoIGVkZ2VzXG4gICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5pc0VQTkNsYXNzKG5vZGVDbGFzcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlOyAvLyBDdXJyZW50bHkganVzdCAnY29tcGFydG1lbnQnIGFuZCAnY29tcGxleCcgY29tcG91bmRzIGFyZSBzdXBwb3J0ZWQgcmV0dXJuIGZhbHNlIGZvciBhbnkgb3RoZXIgcGFyZW50Q2xhc3NcbiAgfTtcblxuICAvLyBHZXQgY29tbW9uIHByb3BlcnRpZXMgb2YgZ2l2ZW4gZWxlbWVudHMuIFJldHVybnMgbnVsbCBpZiB0aGUgZ2l2ZW4gZWxlbWVudCBsaXN0IGlzIGVtcHR5IG9yIHRoZVxuICAvLyBwcm9wZXJ0eSBpcyBub3QgY29tbW9uIGZvciBhbGwgZWxlbWVudHMuIGRhdGFPckNzcyBwYXJhbWV0ZXIgc3BlY2lmeSB3aGV0aGVyIHRvIGNoZWNrIHRoZSBwcm9wZXJ0eSBvbiBkYXRhIG9yIGNzcy5cbiAgLy8gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGl0IGlzIGRhdGEuIElmIHByb3BlcnR5TmFtZSBwYXJhbWV0ZXIgaXMgZ2l2ZW4gYXMgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGVcbiAgLy8gcHJvcGVydHkgbmFtZSB0aGVuIHVzZSB3aGF0IHRoYXQgZnVuY3Rpb24gcmV0dXJucy5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRDb21tb25Qcm9wZXJ0eSA9IGZ1bmN0aW9uIChlbGVtZW50cywgcHJvcGVydHlOYW1lLCBkYXRhT3JDc3MpIHtcbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBpc0Z1bmN0aW9uO1xuICAgIC8vIElmIHdlIGFyZSBub3QgY29tcGFyaW5nIHRoZSBwcm9wZXJ0aWVzIGRpcmVjdGx5IHVzZXJzIGNhbiBzcGVjaWZ5IGEgZnVuY3Rpb24gYXMgd2VsbFxuICAgIGlmICh0eXBlb2YgcHJvcGVydHlOYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpc0Z1bmN0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBVc2UgZGF0YSBhcyBkZWZhdWx0XG4gICAgaWYgKCFpc0Z1bmN0aW9uICYmICFkYXRhT3JDc3MpIHtcbiAgICAgIGRhdGFPckNzcyA9ICdkYXRhJztcbiAgICB9XG5cbiAgICB2YXIgZ2V0VmFsID0gZnVuY3Rpb24oIGluZGV4ICkge1xuICAgICAgICB2YXIgdmFsID0gaXNGdW5jdGlvbiA/IHByb3BlcnR5TmFtZShlbGVtZW50c1tpbmRleF0pIDogZWxlbWVudHNbaW5kZXhdW2RhdGFPckNzc10ocHJvcGVydHlOYW1lKTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBnZXRWYWwoIDAgKTtcblxuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICggZ2V0VmFsKCBpICkgIT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xuXG4gIC8vIFJldHVybnMgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB0cnV0aHkgdmFsdWUgZm9yIGFsbCBvZiB0aGUgZ2l2ZW4gZWxlbWVudHMuXG4gIGVsZW1lbnRVdGlsaXRpZXMudHJ1ZUZvckFsbEVsZW1lbnRzID0gZnVuY3Rpb24gKGVsZW1lbnRzLCBmY24pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWZjbihlbGVtZW50c1tpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZSBlbGVtZW50IGNhbiBoYXZlIHNiZ25jYXJkaW5hbGl0eVxuICBlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVTQkdOQ2FyZGluYWxpdHkgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlIClcblxuICAgIHJldHVybiBzYmduY2xhc3MgPT0gJ2NvbnN1bXB0aW9uJyB8fCBzYmduY2xhc3MgPT0gJ3Byb2R1Y3Rpb24nO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZSBlbGVtZW50IGNhbiBoYXZlIHNiZ25sYWJlbFxuICBlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVTQkdOTGFiZWwgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICByZXR1cm4gc2JnbmNsYXNzICE9ICdhbmQnICYmIHNiZ25jbGFzcyAhPSAnb3InICYmIHNiZ25jbGFzcyAhPSAnbm90JyAmJiBzYmduY2xhc3MgIT0gJ2RlbGF5J1xuICAgICAgICAgICAgJiYgc2JnbmNsYXNzICE9ICdhc3NvY2lhdGlvbicgJiYgc2JnbmNsYXNzICE9ICdkaXNzb2NpYXRpb24nICYmIHNiZ25jbGFzcyAhPSAnc291cmNlIGFuZCBzaW5rJyAmJiAhc2JnbmNsYXNzLmVuZHNXaXRoKCdwcm9jZXNzJyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlIGVsZW1lbnQgaGF2ZSB1bml0IG9mIGluZm9ybWF0aW9uXG4gIGVsZW1lbnRVdGlsaXRpZXMuY2FuSGF2ZVVuaXRPZkluZm9ybWF0aW9uID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuXG4gICAgaWYgKHNiZ25jbGFzcyA9PSAnc2ltcGxlIGNoZW1pY2FsJ1xuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdtYWNyb21vbGVjdWxlJyB8fCBzYmduY2xhc3MgPT0gJ251Y2xlaWMgYWNpZCBmZWF0dXJlJ1xuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdjb21wbGV4JyB8fCBzYmduY2xhc3MgPT0gJ3NpbXBsZSBjaGVtaWNhbCBtdWx0aW1lcidcbiAgICAgICAgICAgIHx8IHNiZ25jbGFzcyA9PSAnbWFjcm9tb2xlY3VsZSBtdWx0aW1lcicgfHwgc2JnbmNsYXNzID09ICdudWNsZWljIGFjaWQgZmVhdHVyZSBtdWx0aW1lcidcbiAgICAgICAgICAgIHx8IHNiZ25jbGFzcyA9PSAnY29tcGxleCBtdWx0aW1lcicgfHwgKHNiZ25jbGFzcy5zdGFydHNXaXRoKCdCQScpICYmIHNiZ25jbGFzcyAhPSBcIkJBIHBsYWluXCIpXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ2NvbXBhcnRtZW50JyB8fCBzYmduY2xhc3MgPT0gJ1NJRiBtYWNyb21vbGVjdWxlJyB8fCBzYmduY2xhc3MgPT0gJ1NJRiBzaW1wbGUgY2hlbWljYWwnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHVuaXRzIG9mIGluZm9ybWF0aW9uXG4gIGVsZW1lbnRVdGlsaXRpZXMuY2FuSGF2ZU11bHRpcGxlVW5pdE9mSW5mb3JtYXRpb24gPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG4gICAgcmV0dXJuICFzYmduY2xhc3Muc3RhcnRzV2l0aCgnQkEnKTtcbiAgfTtcblxuXG4gIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZSBlbGVtZW50IGhhdmUgc3RhdGUgdmFyaWFibGVcbiAgZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlU3RhdGVWYXJpYWJsZSA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIGlmIChzYmduY2xhc3MgPT0gJ21hY3JvbW9sZWN1bGUnIHx8IHNiZ25jbGFzcyA9PSAnbnVjbGVpYyBhY2lkIGZlYXR1cmUnXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ2NvbXBsZXgnXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ21hY3JvbW9sZWN1bGUgbXVsdGltZXInIHx8IHNiZ25jbGFzcyA9PSAnbnVjbGVpYyBhY2lkIGZlYXR1cmUgbXVsdGltZXInXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ2NvbXBsZXggbXVsdGltZXInKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlIHNob3VsZCBiZSBzcXVhcmUgaW4gc2hhcGVcbiAgZWxlbWVudFV0aWxpdGllcy5tdXN0QmVTcXVhcmUgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICByZXR1cm4gKHNiZ25jbGFzcy5pbmRleE9mKCdwcm9jZXNzJykgIT0gLTEgfHwgc2JnbmNsYXNzID09ICdzb3VyY2UgYW5kIHNpbmsnXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ2FuZCcgfHwgc2JnbmNsYXNzID09ICdvcicgfHwgc2JnbmNsYXNzID09ICdub3QnXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ2Fzc29jaWF0aW9uJyB8fCBzYmduY2xhc3MgPT0gJ2Rpc3NvY2lhdGlvbicgfHwgc2JnbmNsYXNzID09ICdkZWxheScpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciBhbnkgb2YgdGhlIGdpdmVuIG5vZGVzIG11c3Qgbm90IGJlIGluIHNxdWFyZSBzaGFwZVxuICBlbGVtZW50VXRpbGl0aWVzLnNvbWVNdXN0Tm90QmVTcXVhcmUgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgaWYgKCFlbGVtZW50VXRpbGl0aWVzLm11c3RCZVNxdWFyZShub2RlLmRhdGEoJ2NsYXNzJykpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVzIGVsZW1lbnQgY2FuIGJlIGNsb25lZFxuICBlbGVtZW50VXRpbGl0aWVzLmNhbkJlQ2xvbmVkID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuXG4gICAgdmFyIGxpc3QgPSB7XG4gICAgICAndW5zcGVjaWZpZWQgZW50aXR5JzogdHJ1ZSxcbiAgICAgICdtYWNyb21vbGVjdWxlJzogdHJ1ZSxcbiAgICAgICdjb21wbGV4JzogdHJ1ZSxcbiAgICAgICdudWNsZWljIGFjaWQgZmVhdHVyZSc6IHRydWUsXG4gICAgICAnc2ltcGxlIGNoZW1pY2FsJzogdHJ1ZSxcbiAgICAgICdwZXJ0dXJiaW5nIGFnZW50JzogdHJ1ZVxuICAgIH07XG5cbiAgICByZXR1cm4gbGlzdFtzYmduY2xhc3NdID8gdHJ1ZSA6IGZhbHNlO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZXMgZWxlbWVudCBjYW4gYmUgY2xvbmVkXG4gIGVsZW1lbnRVdGlsaXRpZXMuY2FuQmVNdWx0aW1lciA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIHZhciBsaXN0ID0ge1xuICAgICAgJ21hY3JvbW9sZWN1bGUnOiB0cnVlLFxuICAgICAgJ2NvbXBsZXgnOiB0cnVlLFxuICAgICAgJ251Y2xlaWMgYWNpZCBmZWF0dXJlJzogdHJ1ZSxcbiAgICAgICdzaW1wbGUgY2hlbWljYWwnOiB0cnVlXG4gICAgfTtcblxuICAgIHJldHVybiBsaXN0W3NiZ25jbGFzc10gPyB0cnVlIDogZmFsc2U7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5pc0Jpb2xvZ2ljYWxBY3Rpdml0eSA9IGZ1bmN0aW9uKCBlbGUgKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICByZXR1cm4gaW5BcnJheSggc2JnbmNsYXNzLCBlbGVtZW50VXRpbGl0aWVzLmJpb2xvZ2ljYWxBY3Rpdml0eVR5cGVzICk7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5pc1NJRk5vZGUgPSBmdW5jdGlvbiggZWxlICkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuXG4gICAgcmV0dXJuIGluQXJyYXkoIHNiZ25jbGFzcywgZWxlbWVudFV0aWxpdGllcy5zaWZUeXBlcyApO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZFZGdlID0gZnVuY3Rpb24oIGVsZSApIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIHJldHVybiBpbkFycmF5KCBzYmduY2xhc3MsIGVsZW1lbnRVdGlsaXRpZXMuc2lmRWRnZVR5cGVzICk7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5pc1VuZGlyZWN0ZWRFZGdlID0gZnVuY3Rpb24oIGVsZSApIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIHJldHVybiBpbkFycmF5KCBzYmduY2xhc3MsIGVsZW1lbnRVdGlsaXRpZXMudW5kaXJlY3RlZEVkZ2VUeXBlcyApO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNEaXJlY3RlZEVkZ2UgPSBmdW5jdGlvbiggZWxlICkge1xuICAgIHJldHVybiAhZWxlbWVudFV0aWxpdGllcy5pc1VuZGlyZWN0ZWRFZGdlKCBlbGUgKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYW4gRVBOXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNFUE5DbGFzcyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIHJldHVybiBpbkFycmF5KCBzYmduY2xhc3MsIGVsZW1lbnRVdGlsaXRpZXMuZXBuVHlwZXMgKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSBQTlxuICBlbGVtZW50VXRpbGl0aWVzLmlzUE5DbGFzcyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIHJldHVybiBpbkFycmF5KCBzYmduY2xhc3MsIGVsZW1lbnRVdGlsaXRpZXMucHJvY2Vzc1R5cGVzICk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3ZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgb3Igc3RyaW5nIGlzIG9mIHRoZSBzcGVjaWFsIGVtcHR5IHNldC9zb3VyY2UgYW5kIHNpbmsgY2xhc3NcbiAgZWxlbWVudFV0aWxpdGllcy5pc0VtcHR5U2V0Q2xhc3MgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG4gICAgcmV0dXJuIHNiZ25jbGFzcyA9PSAnc291cmNlIGFuZCBzaW5rJztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgaXMgYSBsb2dpY2FsIG9wZXJhdG9yXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNMb2dpY2FsT3BlcmF0b3IgPSBmdW5jdGlvbiggZWxlICkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuICAgIHJldHVybiBpbkFycmF5KCBzYmduY2xhc3MsIGVsZW1lbnRVdGlsaXRpZXMubG9naWNhbE9wZXJhdG9yVHlwZXMgKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGNsYXNzIG9mIGdpdmVuIGVsZW1lbnQgaXMgYSBlcXVpdmFsYW5jZSBjbGFzc1xuICBlbGVtZW50VXRpbGl0aWVzLmNvbnZlbmllbnRUb0VxdWl2YWxlbmNlID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuICAgIHJldHVybiAoc2JnbmNsYXNzID09ICd0YWcnIHx8IHNiZ25jbGFzcyA9PSAndGVybWluYWwnKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGNsYXNzIG9mIGdpdmVuIGVsZW1lbnQgaXMgYSBtb2R1bGF0aW9uIGFyYyBhcyBkZWZpbmVkIGluIFBEIHNwZWNzXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNNb2R1bGF0aW9uQXJjQ2xhc3MgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG4gICAgcmV0dXJuIChzYmduY2xhc3MgPT0gJ21vZHVsYXRpb24nXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ3N0aW11bGF0aW9uJyB8fCBzYmduY2xhc3MgPT0gJ2NhdGFseXNpcydcbiAgICAgICAgICAgIHx8IHNiZ25jbGFzcyA9PSAnaW5oaWJpdGlvbicgfHwgc2JnbmNsYXNzID09ICduZWNlc3Nhcnkgc3RpbXVsYXRpb24nKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGNsYXNzIG9mIGdpdmVuIGVsZW1lbnQgaXMgYW4gYXJjIG9mIEFGIHNwZWNzIGV4Y2VwdCBsb2dpY2FsIGFyY1xuICBlbGVtZW50VXRpbGl0aWVzLmlzQUZBcmNDbGFzcyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcbiAgICByZXR1cm4gKHNiZ25jbGFzcyA9PSAncG9zaXRpdmUgaW5mbHVlbmNlJyB8fCBzYmduY2xhc3MgPT0gJ25lZ2F0aXZlIGluZmx1ZW5jZSdcbiAgICAgICAgICAgIHx8IHNiZ25jbGFzcyA9PSAndW5rbm93biBpbmZsdWVuY2UnIHx8IHNiZ25jbGFzcyA9PSAnbmVjZXNzYXJ5IHN0aW11bGF0aW9uJyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IG9yIGVsZW1lbnRzIHdpdGggdGhlIGdpdmVuIGNsYXNzIGNhbiBoYXZlIHBvcnRzLlxuICBlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVQb3J0cyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcbiAgICByZXR1cm4gc2JnbmNsYXNzICE9ICdwaGVub3R5cGUnICYmIHNiZ25jbGFzcyAhPSAnZGVsYXknXG4gICAgICAgICAgICAmJiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNMb2dpY2FsT3BlcmF0b3IoIHNiZ25jbGFzcyApXG4gICAgICAgICAgICAgICAgICB8fCBlbGVtZW50VXRpbGl0aWVzLmlzUE5DbGFzcyggc2JnbmNsYXNzICkgKTtcbiAgfTtcblxuICAvLyBTZWN0aW9uIFN0YXJ0XG4gIC8vIEdlbmVyYWwgRWxlbWVudCBVdGlsaXRpZXNcblxuICAvL3RoaXMgbWV0aG9kIHJldHVybnMgdGhlIG5vZGVzIG5vbiBvZiB3aG9zZSBhbmNlc3RvcnMgaXMgbm90IGluIGdpdmVuIG5vZGVzXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0VG9wTW9zdE5vZGVzID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgICB2YXIgbm9kZXNNYXAgPSB7fTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBub2Rlc01hcFtub2Rlc1tpXS5pZCgpXSA9IHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgcm9vdHMgPSBub2Rlcy5maWx0ZXIoZnVuY3Rpb24gKGVsZSwgaSkge1xuICAgICAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBwYXJlbnQgPSBlbGUucGFyZW50KClbMF07XG4gICAgICAgICAgd2hpbGUocGFyZW50ICE9IG51bGwpe1xuICAgICAgICAgICAgaWYobm9kZXNNYXBbcGFyZW50LmlkKCldKXtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudCgpWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcm9vdHM7XG4gIH07XG5cbiAgLy9UaGlzIG1ldGhvZCBjaGVja3MgaWYgYWxsIG9mIHRoZSBnaXZlbiBub2RlcyBoYXZlIHRoZSBzYW1lIHBhcmVudCBhc3N1bWluZyB0aGF0IHRoZSBzaXplXG4gIC8vb2YgIG5vZGVzIGlzIG5vdCAwXG4gIGVsZW1lbnRVdGlsaXRpZXMuYWxsSGF2ZVRoZVNhbWVQYXJlbnQgPSBmdW5jdGlvbiAobm9kZXMpIHtcbiAgICAgIGlmIChub2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIHBhcmVudCA9IG5vZGVzWzBdLmRhdGEoXCJwYXJlbnRcIik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgICBpZiAobm9kZS5kYXRhKFwicGFyZW50XCIpICE9IHBhcmVudCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5tb3ZlTm9kZXMgPSBmdW5jdGlvbihwb3NpdGlvbkRpZmYsIG5vZGVzLCBub3RDYWxjVG9wTW9zdE5vZGVzKSB7XG4gICAgdmFyIHRvcE1vc3ROb2RlcyA9IG5vdENhbGNUb3BNb3N0Tm9kZXMgPyBub2RlcyA6IHRoaXMuZ2V0VG9wTW9zdE5vZGVzKG5vZGVzKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvcE1vc3ROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSB0b3BNb3N0Tm9kZXNbaV07XG4gICAgICB2YXIgb2xkWCA9IG5vZGUucG9zaXRpb24oXCJ4XCIpO1xuICAgICAgdmFyIG9sZFkgPSBub2RlLnBvc2l0aW9uKFwieVwiKTtcbiAgICAgIG5vZGUucG9zaXRpb24oe1xuICAgICAgICB4OiBvbGRYICsgcG9zaXRpb25EaWZmLngsXG4gICAgICAgIHk6IG9sZFkgKyBwb3NpdGlvbkRpZmYueVxuICAgICAgfSk7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKCk7XG4gICAgICB0aGlzLm1vdmVOb2Rlcyhwb3NpdGlvbkRpZmYsIGNoaWxkcmVuLCB0cnVlKTtcbiAgICB9XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5jb252ZXJ0VG9Nb2RlbFBvc2l0aW9uID0gZnVuY3Rpb24gKHJlbmRlcmVkUG9zaXRpb24pIHtcbiAgICB2YXIgcGFuID0gY3kucGFuKCk7XG4gICAgdmFyIHpvb20gPSBjeS56b29tKCk7XG5cbiAgICB2YXIgeCA9IChyZW5kZXJlZFBvc2l0aW9uLnggLSBwYW4ueCkgLyB6b29tO1xuICAgIHZhciB5ID0gKHJlbmRlcmVkUG9zaXRpb24ueSAtIHBhbi55KSAvIHpvb207XG5cbiAgICByZXR1cm4ge1xuICAgICAgeDogeCxcbiAgICAgIHk6IHlcbiAgICB9O1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvUmVuZGVyZWRQb3NpdGlvbiA9IGZ1bmN0aW9uIChtb2RlbFBvcywgcGFuLCB6b29tKSB7XG4gICAgcGFuID0gcGFuIHx8IGN5LnBhbigpO1xuICAgIHpvb20gPSB6b29tIHx8IGN5Lnpvb20oKTtcblxuICAgIHZhciByZXMgPSB7fTtcblxuICAgIFsneCcsICd5J10uZm9yRWFjaCggZnVuY3Rpb24oZGltKSB7XG4gICAgICByZXNbZGltXSA9IG1vZGVsUG9zW2RpbV0gKiB6b29tICsgcGFuW2RpbV07XG4gICAgfSApO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICAvLyBTZWN0aW9uIEVuZFxuICAvLyBHZW5lcmFsIEVsZW1lbnQgVXRpbGl0aWVzXG5cbiAgLy8gU2VjdGlvbiBTdGFydFxuICAvLyBFbGVtZW50IEZpbHRlcmluZyBVdGlsaXRpZXNcblxuICAvLyBTQkdOIHNwZWNpZmljIHV0aWxpdGllc1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHJvY2Vzc2VzT2ZTZWxlY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxlY3RlZEVsZXMgPSBjeS5lbGVtZW50cyhcIjpzZWxlY3RlZFwiKTtcbiAgICAgIHNlbGVjdGVkRWxlcyA9IHRoaXMuZXh0ZW5kTm9kZUxpc3Qoc2VsZWN0ZWRFbGVzKTtcbiAgICAgIHJldHVybiBzZWxlY3RlZEVsZXM7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXROZWlnaGJvdXJzT2ZTZWxlY3RlZCA9IGZ1bmN0aW9uKCl7XG4gICAgICB2YXIgc2VsZWN0ZWRFbGVzID0gY3kuZWxlbWVudHMoXCI6c2VsZWN0ZWRcIik7XG4gICAgICB2YXIgZWxlc1RvSGlnaGxpZ2h0ID0gdGhpcy5nZXROZWlnaGJvdXJzT2ZOb2RlcyhzZWxlY3RlZEVsZXMpO1xuICAgICAgcmV0dXJuIGVsZXNUb0hpZ2hsaWdodDtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldE5laWdoYm91cnNPZk5vZGVzID0gZnVuY3Rpb24oX25vZGVzKXtcbiAgICAgIHZhciBub2RlcyA9IF9ub2Rlcy5ub2RlcygpOyAvLyBFbnN1cmUgdGhhdCBub2RlcyBsaXN0IGp1c3QgaW5jbHVkZSBub2Rlc1xuICAgICAgbm9kZXMgPSBub2Rlcy5hZGQobm9kZXMucGFyZW50cyhcIm5vZGVbY2xhc3NePSdjb21wbGV4J11cIikpO1xuICAgICAgbm9kZXMgPSBub2Rlcy5hZGQobm9kZXMuZGVzY2VuZGFudHMoKSk7XG4gICAgICB2YXIgbmVpZ2hib3Job29kRWxlcyA9IG5vZGVzLm5laWdoYm9yaG9vZCgpO1xuICAgICAgdmFyIGVsZXNUb1JldHVybiA9IG5vZGVzLmFkZChuZWlnaGJvcmhvb2RFbGVzKTtcbiAgICAgIGVsZXNUb1JldHVybiA9IGVsZXNUb1JldHVybi5hZGQoZWxlc1RvUmV0dXJuLmRlc2NlbmRhbnRzKCkpO1xuICAgICAgcmV0dXJuIGVsZXNUb1JldHVybjtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZE5vZGVMaXN0ID0gZnVuY3Rpb24gKG5vZGVzVG9TaG93KSB7XG4gICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAvL2FkZCBjaGlsZHJlblxuICAgICAgbm9kZXNUb1Nob3cgPSBub2Rlc1RvU2hvdy5hZGQobm9kZXNUb1Nob3cubm9kZXMoKS5kZXNjZW5kYW50cygpKTtcbiAgICAgIC8vYWRkIHBhcmVudHNcbiAgICAgIG5vZGVzVG9TaG93ID0gbm9kZXNUb1Nob3cuYWRkKG5vZGVzVG9TaG93LnBhcmVudHMoKSk7XG4gICAgICAvL2FkZCBjb21wbGV4IGNoaWxkcmVuXG4gICAgICBub2Rlc1RvU2hvdyA9IG5vZGVzVG9TaG93LmFkZChub2Rlc1RvU2hvdy5ub2RlcyhcIm5vZGVbY2xhc3NePSdjb21wbGV4J11cIikuZGVzY2VuZGFudHMoKSk7XG5cbiAgICAgIC8vIHZhciBwcm9jZXNzZXMgPSBub2Rlc1RvU2hvdy5ub2RlcyhcIm5vZGVbY2xhc3M9J3Byb2Nlc3MnXVwiKTtcbiAgICAgIC8vIHZhciBub25Qcm9jZXNzZXMgPSBub2Rlc1RvU2hvdy5ub2RlcyhcIm5vZGVbY2xhc3MhPSdwcm9jZXNzJ11cIik7XG4gICAgICAvLyB2YXIgbmVpZ2hib3JQcm9jZXNzZXMgPSBub25Qcm9jZXNzZXMubmVpZ2hib3Job29kKFwibm9kZVtjbGFzcz0ncHJvY2VzcyddXCIpO1xuXG4gICAgICBleHRlbmROb2RlVHlwZXMgPSBbJ3Byb2Nlc3MnLCAnb21pdHRlZCBwcm9jZXNzJywgJ3VuY2VydGFpbiBwcm9jZXNzJyxcbiAgICAgICdhc3NvY2lhdGlvbicsICdkaXNzb2NpYXRpb24nLCAncGhlbm90eXBlJywgJ2FuZCcsICdvcicsICdub3QnLCAnZGVsYXknXTtcblxuICAgICAgLy9IZXJlLCBsb2dpY2FsIG9wZXJhdG9ycyBhcmUgYWxzbyBjb25zaWRlcmVkIGFzIHByb2Nlc3Nlcywgc2luY2UgdGhleSBhbHNvIGdldCBpbnB1dHMgYW5kIG91dHB1dHNcbiAgICAgIHZhciBwcm9jZXNzZXMgPSBub2Rlc1RvU2hvdy5maWx0ZXIoZnVuY3Rpb24oZWxlLCBpKXtcbiAgICAgICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBlbGUgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaW5BcnJheShlbGUuX3ByaXZhdGUuZGF0YS5jbGFzcywgZXh0ZW5kTm9kZVR5cGVzKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG5vblByb2Nlc3NlcyA9IG5vZGVzVG9TaG93LmZpbHRlcihmdW5jdGlvbihlbGUsIGkpe1xuICAgICAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhaW5BcnJheShlbGUuX3ByaXZhdGUuZGF0YS5jbGFzcywgZXh0ZW5kTm9kZVR5cGVzKTtcbiAgICAgIH0pO1xuICAgICAgdmFyIG5laWdoYm9yUHJvY2Vzc2VzID0gbm9uUHJvY2Vzc2VzLm5laWdoYm9yaG9vZCgpLnVuaW9uKHByb2Nlc3Nlcy5uZWlnaGJvcmhvb2QoKSkuZmlsdGVyKGZ1bmN0aW9uKGVsZSwgaSl7XG4gICAgICAgICAgaWYodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZWxlID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGluQXJyYXkoZWxlLl9wcml2YXRlLmRhdGEuY2xhc3MsIGV4dGVuZE5vZGVUeXBlcyk7XG4gICAgICB9KTtcbiAgICAgIC8vRm9yIEFGIHN1cHBvcnQsIHN1YmplY3QgdG8gY2hhbmdlXG4gICAgICB2YXIgbmVpZ2hib3JOb25Qcm9jZXNzZXMgPSBub25Qcm9jZXNzZXMudW5pb24obm9uUHJvY2Vzc2VzLm5laWdoYm9yaG9vZChcIjpoaWRkZW5cIikpLmZpbHRlcihmdW5jdGlvbihlbGUsIGkpe1xuICAgICAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAhaW5BcnJheShlbGUuX3ByaXZhdGUuZGF0YS5jbGFzcywgZXh0ZW5kTm9kZVR5cGVzKTtcbiAgICAgIH0pO1xuXG4gICAgICBub2Rlc1RvU2hvdyA9IG5vZGVzVG9TaG93LmFkZChwcm9jZXNzZXMubmVpZ2hib3Job29kKCkpO1xuICAgICAgbm9kZXNUb1Nob3cgPSBub2Rlc1RvU2hvdy5hZGQobmVpZ2hib3JQcm9jZXNzZXMpO1xuICAgICAgbm9kZXNUb1Nob3cgPSBub2Rlc1RvU2hvdy5hZGQobmVpZ2hib3JQcm9jZXNzZXMubmVpZ2hib3Job29kKCkpO1xuICAgICAgbm9kZXNUb1Nob3cgPSBub2Rlc1RvU2hvdy5hZGQobmVpZ2hib3JOb25Qcm9jZXNzZXMpO1xuXG4gICAgICBuZWlnaGJvclByb2Nlc3Nlcy5uZWlnaGJvcmhvb2QoKS5mb3JFYWNoKGZ1bmN0aW9uKGVsZSl7XG4gICAgICAgICAgaWYoaW5BcnJheShlbGUuX3ByaXZhdGUuZGF0YS5jbGFzcywgZXh0ZW5kTm9kZVR5cGVzKSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgbm9kZXNUb1Nob3cgPSBub2Rlc1RvU2hvdy5hZGQoZWxlLm5laWdoYm9yaG9vZCgpKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy9hZGQgcGFyZW50c1xuICAgICAgbm9kZXNUb1Nob3cgPSBub2Rlc1RvU2hvdy5hZGQobm9kZXNUb1Nob3cubm9kZXMoKS5wYXJlbnRzKCkpO1xuICAgICAgLy9hZGQgY2hpbGRyZW5cbiAgICAgIG5vZGVzVG9TaG93ID0gbm9kZXNUb1Nob3cuYWRkKG5vZGVzVG9TaG93Lm5vZGVzKFwibm9kZVtjbGFzc149J2NvbXBsZXgnXVwiKS5kZXNjZW5kYW50cygpKTtcblxuICAgICAgcmV0dXJuIG5vZGVzVG9TaG93O1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kUmVtYWluaW5nTm9kZXMgPSBmdW5jdGlvbiAobm9kZXNUb0ZpbHRlciwgYWxsTm9kZXMpIHtcbiAgICAgIG5vZGVzVG9GaWx0ZXIgPSB0aGlzLmV4dGVuZE5vZGVMaXN0KG5vZGVzVG9GaWx0ZXIpO1xuICAgICAgdmFyIG5vZGVzVG9TaG93ID0gYWxsTm9kZXMubm90KG5vZGVzVG9GaWx0ZXIpO1xuICAgICAgbm9kZXNUb1Nob3cgPSB0aGlzLmV4dGVuZE5vZGVMaXN0KG5vZGVzVG9TaG93KTtcbiAgICAgIHJldHVybiBub2Rlc1RvU2hvdztcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldFByb2Nlc3Nlc09mTm9kZXMgPSBmdW5jdGlvbihub2Rlcykge1xuICAgIHJldHVybiB0aGlzLmV4dGVuZE5vZGVMaXN0KG5vZGVzKTtcbiAgfTtcblxuICAvLyBnZW5lcmFsIHV0aWxpdGllc1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMubm9uZUlzTm90SGlnaGxpZ2h0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZpZXdVdGlsaXRpZXMgPSBjeS52aWV3VXRpbGl0aWVzKCdnZXQnKTtcbiAgICB2YXIgaGlnaGxpZ2h0Q2xhc3NlcyA9IHZpZXdVdGlsaXRpZXMuZ2V0QWxsSGlnaGxpZ2h0Q2xhc3NlcygpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGlnaGxpZ2h0Q2xhc3Nlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGN5LiQoJy4nICsgaGlnaGxpZ2h0Q2xhc3Nlc1tpXSkuaXMoJzp2aXNpYmxlJykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBTZWN0aW9uIEVuZFxuICAvLyBFbGVtZW50IEZpbHRlcmluZyBVdGlsaXRpZXNcblxuICAvLyBTZWN0aW9uIFN0YXJ0XG4gIC8vIEFkZCByZW1vdmUgdXRpbGl0aWVzXG5cbiAgLy8gU0JHTiBzcGVjaWZpYyB1dGlsaXRpZXNcblxuICBlbGVtZW50VXRpbGl0aWVzLmRlbGV0ZU5vZGVzU21hcnQgPSBmdW5jdGlvbiAoX25vZGVzKSB7XG4gICAgdmFyIG5vZGVzID0gX25vZGVzLm5vZGVzKCk7IC8vIEVuc3VyZSB0aGF0IG5vZGVzIGxpc3QganVzdCBpbmNsdWRlIG5vZGVzXG5cbiAgICB2YXIgYWxsTm9kZXMgPSBjeS5ub2RlcygpO1xuICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgICB2YXIgbm9kZXNUb0tlZXAgPSB0aGlzLmV4dGVuZFJlbWFpbmluZ05vZGVzKG5vZGVzLCBhbGxOb2Rlcyk7XG4gICAgdmFyIG5vZGVzTm90VG9LZWVwID0gYWxsTm9kZXMubm90KG5vZGVzVG9LZWVwKTtcbiAgICByZXR1cm4gbm9kZXNOb3RUb0tlZXAucmVtb3ZlKCk7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5kZWxldGVFbGVzU2ltcGxlID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgcmV0dXJuIGVsZXMucmVtb3ZlKCk7XG4gIH07XG5cbiAgLy8gZ2VuZXJhbCB1dGlsaXRpZXNcblxuICBlbGVtZW50VXRpbGl0aWVzLnJlc3RvcmVFbGVzID0gZnVuY3Rpb24gKGVsZXMpIHtcbiAgICAgIGVsZXMucmVzdG9yZSgpO1xuICAgICAgcmV0dXJuIGVsZXM7XG4gIH07XG5cbiAgLy8gU2VjdGlvbiBFbmRcbiAgLy8gQWRkIHJlbW92ZSB1dGlsaXRpZXNcblxuICAvLyBTZWN0aW9uIFN0YXJ0XG4gIC8vIFN0eWxlc2hlZXQgaGVscGVyc1xuXG4gIC8vIFNCR04gc3BlY2lmaWMgdXRpbGl0aWVzXG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRBcnJheUxpbmVTdHlsZSA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIHN3aXRjaCAoc2JnbmNsYXNzKSB7XG4gICAgICBjYXNlICdjb250cm9scy1leHByZXNzaW9uLW9mJzogY2FzZSAndXByZWd1bGF0ZXMtZXhwcmVzc2lvbic6XG4gICAgICBjYXNlICdkb3ducmVndWxhdGVzLWV4cHJlc3Npb24nOlxuICAgICAgICByZXR1cm4gJ2Rhc2hlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3NvbGlkJztcbiAgICB9XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRDeVNoYXBlID0gZnVuY3Rpb24gKGVsZSkge1xuICAgICAgdmFyIF9jbGFzcyA9IGVsZS5kYXRhKCdjbGFzcycpO1xuICAgICAgLy8gR2V0IHJpZCBvZiByZWN0YW5nbGUgcG9zdGZpeCB0byBoYXZlIHRoZSBhY3R1YWwgbm9kZSBjbGFzc1xuICAgICAgaWYgKF9jbGFzcy5lbmRzV2l0aCgnIG11bHRpbWVyJykpIHtcbiAgICAgICAgICBfY2xhc3MgPSBfY2xhc3MucmVwbGFjZSgnIG11bHRpbWVyJywgJycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NsYXNzID09ICdjb21wYXJ0bWVudCcpIHtcbiAgICAgICAgICByZXR1cm4gJ2NvbXBhcnRtZW50JztcbiAgICAgIH1cbiAgICAgIGlmIChfY2xhc3MgPT0gJ3BoZW5vdHlwZScpIHtcbiAgICAgICAgICByZXR1cm4gJ2hleGFnb24nO1xuICAgICAgfVxuICAgICAgaWYgKF9jbGFzcyA9PSAncGVydHVyYmluZyBhZ2VudCcgfHwgX2NsYXNzID09ICd0YWcnKSB7XG4gICAgICAgICAgcmV0dXJuICdwb2x5Z29uJztcbiAgICAgIH1cbiAgICAgIGlmIChfY2xhc3MgPT0gJ1NJRiBtYWNyb21vbGVjdWxlJykge1xuICAgICAgICAgIHJldHVybiAnbWFjcm9tb2xlY3VsZSc7XG4gICAgICB9XG4gICAgICBpZiAoX2NsYXNzID09ICdTSUYgc2ltcGxlIGNoZW1pY2FsJykge1xuICAgICAgICAgIHJldHVybiAnc2ltcGxlIGNoZW1pY2FsJztcbiAgICAgIH1cblxuICAgICAgaWYgKF9jbGFzcy5zdGFydHNXaXRoKCdCQScpKXtcbiAgICAgICAgICByZXR1cm4gJ2Jpb2xvZ2ljYWwgYWN0aXZpdHknO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NsYXNzID09ICdzdWJtYXAnIHx8IF9jbGFzcyA9PSAndG9wb2xvZ3kgZ3JvdXAnKXtcbiAgICAgICAgICByZXR1cm4gJ3JlY3RhbmdsZSc7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG5lZWQgdG8gZGVmaW5lIG5ldyBub2RlIHNoYXBlcyB3aXRoIHRoZWlyIGNsYXNzIG5hbWVzIGZvciB0aGVzZSBub2Rlc1xuICAgICAgaWYgKF9jbGFzcyA9PSAnc291cmNlIGFuZCBzaW5rJyB8fCBfY2xhc3MgPT0gJ251Y2xlaWMgYWNpZCBmZWF0dXJlJyB8fCBfY2xhc3MgPT0gJ21hY3JvbW9sZWN1bGUnXG4gICAgICAgICAgICAgIHx8IF9jbGFzcyA9PSAnc2ltcGxlIGNoZW1pY2FsJyB8fCBfY2xhc3MgPT0gJ2NvbXBsZXgnIHx8IF9jbGFzcyA9PSAnYmlvbG9naWNhbCBhY3Rpdml0eScgKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzcztcbiAgICAgIH1cblxuICAgICAgLy8gVGhlc2Ugc2hhcGVzIGNhbiBoYXZlIHBvcnRzLiBJZiB0aGV5IGhhdmUgcG9ydHMgd2UgcmVwcmVzZW50IHRoZW0gYnkgcG9seWdvbnMsIGVsc2UgdGhleSBhcmUgcmVwcmVzZW50ZWQgYnkgZWxsaXBzZXMgb3IgcmVjdGFuZ2xlc1xuICAgICAgLy8gY29uZGl0aW9uYWxseS5cbiAgICAgIGlmICggdGhpcy5jYW5IYXZlUG9ydHMoX2NsYXNzKSApIHtcblxuICAgICAgICBpZiAoZ3JhcGhVdGlsaXRpZXMucG9ydHNFbmFibGVkID09PSB0cnVlICYmIGVsZS5kYXRhKCdwb3J0cycpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHJldHVybiAncG9seWdvbic7IC8vIFRoZSBub2RlIGhhcyBwb3J0cyByZXByZXNlbnQgaXQgYnkgcG9seWdvblxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF9jbGFzcyA9PSAncHJvY2VzcycgfHwgX2NsYXNzID09ICdvbWl0dGVkIHByb2Nlc3MnIHx8IF9jbGFzcyA9PSAndW5jZXJ0YWluIHByb2Nlc3MnKSB7XG4gICAgICAgICAgcmV0dXJuICdyZWN0YW5nbGUnOyAvLyBJZiBub2RlIGhhcyBubyBwb3J0IGFuZCBoYXMgb25lIG9mIHRoZXNlIGNsYXNzZXMgaXQgc2hvdWxkIGJlIGluIGEgcmVjdGFuZ2xlIHNoYXBlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJ2VsbGlwc2UnOyAvLyBPdGhlciBub2RlcyB3aXRoIG5vIHBvcnQgc2hvdWxkIGJlIGluIGFuIGVsbGlwc2Ugc2hhcGVcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlbWFpbmluZyBub2RlcyBhcmUgc3VwcG9zZWQgdG8gYmUgaW4gZWxsaXBzZSBzaGFwZVxuICAgICAgcmV0dXJuICdlbGxpcHNlJztcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldEN5VGFyZ2V0QXJyb3dGaWxsID0gZnVuY3Rpb24oZWxlKSB7XG4gICAgdmFyIF9jbGFzcyA9IGVsZS5kYXRhKCdjbGFzcycpO1xuXG4gICAgaWYgKCBfY2xhc3MgPT0gJ2luaGliaXRpb24nIHx8IF9jbGFzcyA9PSAnbmVnYXRpdmUgaW5mbHVlbmNlJyB8fFxuICAgICAgICAgIF9jbGFzcyA9PSAncHJvZHVjdGlvbicgfHwgZWxlbWVudFV0aWxpdGllcy5pc1NJRkVkZ2UoIF9jbGFzcyApICkge1xuICAgICAgcmV0dXJuICdmaWxsZWQnO1xuICAgIH1cblxuICAgIHJldHVybiAnaG9sbG93JztcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldEN5QXJyb3dTaGFwZSA9IGZ1bmN0aW9uKGVsZSkge1xuICAgICAgdmFyIF9jbGFzcyA9IGVsZS5kYXRhKCdjbGFzcycpO1xuXG4gICAgICBzd2l0Y2ggKCBfY2xhc3MgKSB7XG4gICAgICAgIGNhc2UgJ25lY2Vzc2FyeSBzdGltdWxhdGlvbic6XG4gICAgICAgICAgcmV0dXJuICd0cmlhbmdsZS1jcm9zcyc7XG4gICAgICAgIGNhc2UgJ2luaGliaXRpb24nOiBjYXNlICduZWdhdGl2ZSBpbmZsdWVuY2UnOiBjYXNlICdpbmhpYml0cyc6XG4gICAgICAgIGNhc2UgJ2Rvd25yZWd1bGF0ZXMtZXhwcmVzc2lvbic6IGNhc2UgJ2RlcGhvc3Bob3J5bGF0ZXMnOlxuICAgICAgICBjYXNlICdpbmhpYml0cy1ndHBhc2UnOiBjYXNlICdkZWFjZXR5bGF0ZXMnOiBjYXNlICdkZW1ldGh5bGF0ZXMnOlxuICAgICAgICAgIHJldHVybiAndGVlJztcbiAgICAgICAgY2FzZSAnY2F0YWx5c2lzJzpcbiAgICAgICAgICByZXR1cm4gJ2NpcmNsZSc7XG4gICAgICAgIGNhc2UgJ3N0aW11bGF0aW9uJzogY2FzZSAncHJvZHVjdGlvbic6IGNhc2UgJ3Bvc2l0aXZlIGluZmx1ZW5jZSc6XG4gICAgICAgIGNhc2UgJ2FjdGl2YXRlcyc6IGNhc2UgJ3Bob3NwaG9yeWxhdGVzJzogY2FzZSAndXByZWd1bGF0ZXMtZXhwcmVzc2lvbic6XG4gICAgICAgIGNhc2UgJ2NvbnRyb2xzLXN0YXRlLWNoYW5nZS1vZic6IGNhc2UgJ2NoZW1pY2FsLWFmZmVjdHMnOlxuICAgICAgICBjYXNlICdjb250cm9scy10cmFuc3BvcnQtb2YnOiBjYXNlICdjb250cm9scy1waG9zcGhvcnlsYXRpb24tb2YnOlxuICAgICAgICBjYXNlICdjb250cm9scy1leHByZXNzaW9uLW9mJzogY2FzZSAnY2F0YWx5c2lzLXByZWNlZGVzJzpcbiAgICAgICAgY2FzZSAnY29uc3VtcHRpb24tY29udHJvbGVkLWJ5JzogY2FzZSAnY29udHJvbHMtcHJvZHVjdGlvbi1vZic6XG4gICAgICAgIGNhc2UgJ2NvbnRyb2xzLXRyYW5zcG9ydC1vZi1jaGVtaWNhbCc6IGNhc2UgJ3VzZWQtdG8tcHJvZHVjZSc6XG4gICAgICAgIGNhc2UgJ2FjdGl2YXRlcy1ndHBhc2UnOiBjYXNlICdhY2V0eWxhdGVzJzogY2FzZSAnbWV0aHlsYXRlcyc6XG4gICAgICAgICAgcmV0dXJuICd0cmlhbmdsZSc7XG4gICAgICAgIGNhc2UgJ21vZHVsYXRpb24nOiBjYXNlICd1bmtub3duIGluZmx1ZW5jZSc6XG4gICAgICAgICAgcmV0dXJuICdkaWFtb25kJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJ25vbmUnO1xuICAgICAgfVxuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0RWxlbWVudENvbnRlbnQgPSBmdW5jdGlvbihlbGUpIHtcbiAgICAgIHZhciBfY2xhc3MgPSBlbGUuZGF0YSgnY2xhc3MnKTtcblxuICAgICAgaWYgKF9jbGFzcy5lbmRzV2l0aCgnIG11bHRpbWVyJykpIHtcbiAgICAgICAgICBfY2xhc3MgPSBfY2xhc3MucmVwbGFjZSgnIG11bHRpbWVyJywgJycpO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGVudCA9IFwiXCI7XG4gICAgICBpZiAoX2NsYXNzID09ICdtYWNyb21vbGVjdWxlJyB8fCBfY2xhc3MgPT0gJ3NpbXBsZSBjaGVtaWNhbCdcbiAgICAgICAgICB8fCBfY2xhc3MgPT0gJ3BoZW5vdHlwZSdcbiAgICAgICAgICB8fCBfY2xhc3MgPT0gJ3Vuc3BlY2lmaWVkIGVudGl0eScgfHwgX2NsYXNzID09ICdudWNsZWljIGFjaWQgZmVhdHVyZSdcbiAgICAgICAgICB8fCBfY2xhc3MgPT0gJ3BlcnR1cmJpbmcgYWdlbnQnIHx8IF9jbGFzcyA9PSAndGFnJ1xuICAgICAgICAgIHx8IF9jbGFzcyA9PSAnYmlvbG9naWNhbCBhY3Rpdml0eScgfHwgX2NsYXNzLnN0YXJ0c1dpdGgoJ0JBJylcbiAgICAgICAgICB8fCBfY2xhc3MgPT0gJ3N1Ym1hcCcgfHwgX2NsYXNzID09ICdTSUYgbWFjcm9tb2xlY3VsZSdcbiAgICAgICAgICB8fCBfY2xhc3MgPT0gJ1NJRiBzaW1wbGUgY2hlbWljYWwnKSB7XG4gICAgICAgICAgY29udGVudCA9IGVsZS5kYXRhKCdsYWJlbCcpID8gZWxlLmRhdGEoJ2xhYmVsJykgOiBcIlwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZihfY2xhc3MgPT0gJ2NvbXBhcnRtZW50Jyl7XG4gICAgICAgICAgY29udGVudCA9IGVsZS5kYXRhKCdsYWJlbCcpID8gZWxlLmRhdGEoJ2xhYmVsJykgOiBcIlwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZihfY2xhc3MgPT0gJ2NvbXBsZXgnKXtcbiAgICAgICAgICBpZihlbGUuY2hpbGRyZW4oKS5sZW5ndGggPT0gMCB8fCBvcHRpb25zLnNob3dDb21wbGV4TmFtZSl7XG4gICAgICAgICAgICAgIGlmKGVsZS5kYXRhKCdsYWJlbCcpKXtcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBlbGUuZGF0YSgnbGFiZWwnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlIGlmKGVsZS5kYXRhKCdpbmZvTGFiZWwnKSl7XG4gICAgICAgICAgICAgICAgICBjb250ZW50ID0gZWxlLmRhdGEoJ2luZm9MYWJlbCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgICBjb250ZW50ID0gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgY29udGVudCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF9jbGFzcyA9PSAnYW5kJykge1xuICAgICAgICAgIGNvbnRlbnQgPSAnQU5EJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF9jbGFzcyA9PSAnb3InKSB7XG4gICAgICAgICAgY29udGVudCA9ICdPUic7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfY2xhc3MgPT0gJ25vdCcpIHtcbiAgICAgICAgICBjb250ZW50ID0gJ05PVCc7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfY2xhc3MgPT0gJ29taXR0ZWQgcHJvY2VzcycpIHtcbiAgICAgICAgICBjb250ZW50ID0gJ1xcXFxcXFxcJztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF9jbGFzcyA9PSAndW5jZXJ0YWluIHByb2Nlc3MnKSB7XG4gICAgICAgICAgY29udGVudCA9ICc/JztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF9jbGFzcyA9PSAnZGlzc29jaWF0aW9uJykge1xuICAgICAgICAgIGNvbnRlbnQgPSAnbyc7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfY2xhc3MgPT0gJ2RlbGF5Jyl7XG4gICAgICAgICAgY29udGVudCA9ICdcXHUwM0M0JzsgLy8gdGF1XG4gICAgICB9XG5cbiAgICAgIHZhciB0ZXh0V2lkdGggPSBlbGUub3V0ZXJXaWR0aCgpIHx8IGVsZS5kYXRhKCdiYm94JykudztcblxuICAgICAgdmFyIHRleHRQcm9wID0ge1xuICAgICAgICAgIGxhYmVsOiBjb250ZW50LFxuICAgICAgICAgIHdpZHRoOiAoIF9jbGFzcyA9PSAncGVydHVyYmluZyBhZ2VudCcgPyB0ZXh0V2lkdGggLyAyIDogdGV4dFdpZHRoKVxuICAgICAgfTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHRleHRQcm9wLmxhYmVsO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0TGFiZWxUZXh0U2l6ZSA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgX2NsYXNzID0gZWxlLmRhdGEoJ2NsYXNzJyk7XG4gICAgLy8gVGhlc2UgdHlwZXMgb2Ygbm9kZXMgY2Fubm90IGhhdmUgbGFiZWwgYnV0IHRoaXMgaXMgc3RhdGVtZW50IGlzIG5lZWRlZCBhcyBhIHdvcmthcm91bmRcbiAgICBpZiAoX2NsYXNzID09PSAnYXNzb2NpYXRpb24nKSB7XG4gICAgICByZXR1cm4gMjA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FuSGF2ZVBvcnRzKF9jbGFzcykpIHtcbiAgICAgIHZhciBjb2VmZiA9IDE7IC8vIFRoZSBkeW5hbWljIGxhYmVsIHNpemUgY29lZmZpY2llbnQgZm9yIHRoZXNlIHBzZXVkbyBsYWJlbHMsIGl0IGlzIDEgZm9yIGxvZ2ljYWwgb3BlcmF0b3JzXG5cbiAgICAgIC8vIENvZWZmIGlzIHN1cHBvc2VkIHRvIGJlIDIgZm9yIGRpc3NvY2lhdGlvbiBhbmQgMS41IGZvciBvdGhlciBwcm9jZXNzZXNcbiAgICAgIGlmIChfY2xhc3MgPT09ICdkaXNzb2NpYXRpb24nKSB7XG4gICAgICAgIGNvZWZmID0gMjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF9jbGFzcy5lbmRzV2l0aCgncHJvY2VzcycpKSB7XG4gICAgICAgIGNvZWZmID0gMS41O1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9ydHMgPSBlbGUuZGF0YSgncG9ydHMnKTtcblxuICAgICAgaWYgKGdyYXBoVXRpbGl0aWVzLnBvcnRzRW5hYmxlZCA9PT0gdHJ1ZSAmJiBwb3J0cy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIHBvcnRzIGFyZSBzeW1tZXRyaWMgdG8gdGhlIG5vZGUgY2VudGVyIHNvIHVzaW5nIGp1c3Qgb25lIG9mIHRoZSBwb3J0cyBpcyBlbm91Z2hcbiAgICAgICAgdmFyIHBvcnQgPSBwb3J0c1swXTtcbiAgICAgICAgdmFyIG9yaWVudGF0aW9uID0gcG9ydC54ID09PSAwID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgcmF0aW8gb2YgdGhlIGFyZWEgb2NjdXBpZWQgd2l0aCBwb3J0cyBvdmVyIHdpdGhvdXQgcG9ydHNcbiAgICAgICAgdmFyIHJhdGlvID0gb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgPyBNYXRoLmFicyhwb3J0LnkpIC8gNTAgOiBNYXRoLmFicyhwb3J0LngpIC8gNTA7XG4gICAgICAgIGNvZWZmIC89IHJhdGlvOyAvLyBEaXZpZGUgdGhlIGNvZWZmIGJ5IHJhdGlvIHRvIGZpdCBpbnRvIHRoZSBiYm94IG9mIHRoZSBhY3R1YWwgc2hhcGUgKGRpc2NsdWRpbmcgcG9ydHMpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmdldER5bmFtaWNMYWJlbFRleHRTaXplKGVsZSwgY29lZmYpO1xuICAgIH1cblxuICAgIGlmIChfY2xhc3MgPT09ICdkZWxheScpe1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RHluYW1pY0xhYmVsVGV4dFNpemUoZWxlLCAyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXREeW5hbWljTGFiZWxUZXh0U2l6ZShlbGUpO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0U3RhdGVWYXJTaGFwZU9wdGlvbnMgPSBmdW5jdGlvbihlbGUpIHtcbiAgICBpZiAoICFlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVTdGF0ZVZhcmlhYmxlKCBlbGUgKSApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBbJ3N0YWRpdW0nXTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldFVuaXRPZkluZm9TaGFwZU9wdGlvbnMgPSBmdW5jdGlvbihlbGUpIHtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyhlbGUpO1xuXG4gICAgaWYgKCAhZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlVW5pdE9mSW5mb3JtYXRpb24oIHR5cGUgKSApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvcHRzID0gbnVsbDtcblxuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc1NJRk5vZGUoIHR5cGUgKSApIHtcbiAgICAgIG9wdHMgPSBbJ3JlY3RhbmdsZScsICdzdGFkaXVtJ107XG4gICAgfVxuICAgIGVsc2UgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzQmlvbG9naWNhbEFjdGl2aXR5KCB0eXBlICkgKSB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSAnQkEgbWFjcm9tb2xlY3VsZSc6XG4gICAgICAgICAgb3B0cyA9IFsncm91bmRyZWN0YW5nbGUnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQkEgbnVjbGVpYyBhY2lkIGZlYXR1cmUnOlxuICAgICAgICAgIG9wdHMgPSBbJ2JvdHRvbXJvdW5kcmVjdGFuZ2xlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0JBIHVuc3BlY2lmaWVkIGVudGl0eSc6XG4gICAgICAgICAgb3B0cyA9IFsnZWxsaXBzZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCQSBjb21wbGV4JzpcbiAgICAgICAgICBvcHRzID0gWydjb21wbGV4J107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0JBIHBlcnR1cmJpbmcgYWdlbnQnOlxuICAgICAgICAgIG9wdHMgPSBbJ3BlcnR1cmJpbmcgYWdlbnQnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQkEgc2ltcGxlIGNoZW1pY2FsJzpcbiAgICAgICAgICBvcHRzID0gWydzdGFkaXVtJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb3B0cyA9IFsncmVjdGFuZ2xlJ107XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdHM7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRDYXJkaW5hbGl0eURpc3RhbmNlID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzcmNQb3MgPSBlbGUuc291cmNlKCkucG9zaXRpb24oKTtcbiAgICB2YXIgdGd0UG9zID0gZWxlLnRhcmdldCgpLnBvc2l0aW9uKCk7XG5cbiAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoTWF0aC5wb3coKHNyY1Bvcy54IC0gdGd0UG9zLngpLCAyKSArIE1hdGgucG93KChzcmNQb3MueSAtIHRndFBvcy55KSwgMikpO1xuICAgIHJldHVybiBkaXN0YW5jZSAqIDAuMjU7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRJbmZvTGFiZWwgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgLyogSW5mbyBsYWJlbCBvZiBhIGNvbGxhcHNlZCBub2RlIGNhbm5vdCBiZSBjaGFuZ2VkIGlmXG4gICAgKiB0aGUgbm9kZSBpcyBjb2xsYXBzZWQgcmV0dXJuIHRoZSBhbHJlYWR5IGV4aXN0aW5nIGluZm8gbGFiZWwgb2YgaXRcbiAgICAqL1xuICAgIGlmIChub2RlLl9wcml2YXRlLmRhdGEuY29sbGFwc2VkQ2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vZGUuX3ByaXZhdGUuZGF0YS5pbmZvTGFiZWw7XG4gICAgfVxuXG4gICAgLypcbiAgICAgKiBJZiB0aGUgbm9kZSBpcyBzaW1wbGUgdGhlbiBpdCdzIGluZm9sYWJlbCBpcyBlcXVhbCB0byBpdCdzIGxhYmVsXG4gICAgICovXG4gICAgaWYgKG5vZGUuY2hpbGRyZW4oKSA9PSBudWxsIHx8IG5vZGUuY2hpbGRyZW4oKS5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIG5vZGUuX3ByaXZhdGUuZGF0YS5sYWJlbDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKCk7XG4gICAgdmFyIGluZm9MYWJlbCA9IFwiXCI7XG4gICAgLypcbiAgICAgKiBHZXQgdGhlIGluZm8gbGFiZWwgb2YgdGhlIGdpdmVuIG5vZGUgYnkgaXQncyBjaGlsZHJlbiBpbmZvIHJlY3Vyc2l2ZWx5XG4gICAgICovXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICB2YXIgY2hpbGRJbmZvID0gdGhpcy5nZXRJbmZvTGFiZWwoY2hpbGQpO1xuICAgICAgaWYgKGNoaWxkSW5mbyA9PSBudWxsIHx8IGNoaWxkSW5mbyA9PSBcIlwiKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaW5mb0xhYmVsICE9IFwiXCIpIHtcbiAgICAgICAgaW5mb0xhYmVsICs9IFwiOlwiO1xuICAgICAgfVxuICAgICAgaW5mb0xhYmVsICs9IGNoaWxkSW5mbztcbiAgICB9XG5cbiAgICAvL3JldHVybiBpbmZvIGxhYmVsXG4gICAgcmV0dXJuIGluZm9MYWJlbDtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldFF0aXBDb250ZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIC8qIENoZWNrIHRoZSBsYWJlbCBvZiB0aGUgbm9kZSBpZiBpdCBpcyBub3QgdmFsaWRcbiAgICAqIHRoZW4gY2hlY2sgdGhlIGluZm9sYWJlbCBpZiBpdCBpcyBhbHNvIG5vdCB2YWxpZCBkbyBub3Qgc2hvdyBxdGlwXG4gICAgKi9cbiAgICB2YXIgbGFiZWwgPSBub2RlLmRhdGEoJ2xhYmVsJyk7XG4gICAgaWYgKGxhYmVsID09IG51bGwgfHwgbGFiZWwgPT0gXCJcIikge1xuICAgICAgbGFiZWwgPSB0aGlzLmdldEluZm9MYWJlbChub2RlKTtcbiAgICB9XG4gICAgaWYgKGxhYmVsID09IG51bGwgfHwgbGFiZWwgPT0gXCJcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjb250ZW50SHRtbCA9IFwiPGIgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxNnB4Oyc+XCIgKyBsYWJlbCArIFwiPC9iPlwiO1xuICAgIHZhciBzdGF0ZXNhbmRpbmZvcyA9IG5vZGUuX3ByaXZhdGUuZGF0YS5zdGF0ZXNhbmRpbmZvcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlc2FuZGluZm9zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2JnbnN0YXRlYW5kaW5mbyA9IHN0YXRlc2FuZGluZm9zW2ldO1xuICAgICAgaWYgKHNiZ25zdGF0ZWFuZGluZm8uY2xhenogPT0gXCJzdGF0ZSB2YXJpYWJsZVwiKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNiZ25zdGF0ZWFuZGluZm8uc3RhdGUudmFsdWU7XG4gICAgICAgIHZhciB2YXJpYWJsZSA9IHNiZ25zdGF0ZWFuZGluZm8uc3RhdGUudmFyaWFibGU7XG4gICAgICAgIHZhciBzdGF0ZUxhYmVsID0gKHZhcmlhYmxlID09IG51bGwgLyp8fCB0eXBlb2Ygc3RhdGVWYXJpYWJsZSA9PT0gdW5kZWZpbmVkICovKSA/IHZhbHVlIDpcbiAgICAgICAgICAgICAgICB2YWx1ZSArIFwiQFwiICsgdmFyaWFibGU7XG4gICAgICAgIGlmIChzdGF0ZUxhYmVsID09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZUxhYmVsID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50SHRtbCArPSBcIjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxNHB4Oyc+XCIgKyBzdGF0ZUxhYmVsICsgXCI8L2Rpdj5cIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHNiZ25zdGF0ZWFuZGluZm8uY2xhenogPT0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIpIHtcbiAgICAgICAgdmFyIHN0YXRlTGFiZWwgPSBzYmduc3RhdGVhbmRpbmZvLmxhYmVsLnRleHQ7XG4gICAgICAgIGlmIChzdGF0ZUxhYmVsID09IG51bGwpIHtcbiAgICAgICAgICBzdGF0ZUxhYmVsID0gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50SHRtbCArPSBcIjxkaXYgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxNHB4Oyc+XCIgKyBzdGF0ZUxhYmVsICsgXCI8L2Rpdj5cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnRIdG1sO1xuICB9O1xuXG4gIC8vIGdlbmVyYWwgdXRpbGl0aWVzXG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXREeW5hbWljTGFiZWxTaXplQ29lZmZpY2llbnQgPSBmdW5jdGlvbiggZHluYW1pY0xhYmVsU2l6ZSApIHtcbiAgICB2YXIgbWFwID0ge1xuICAgICAgJ3NtYWxsJzogMC43NSxcbiAgICAgICdyZWd1bGFyJzogMSxcbiAgICAgICdsYXJnZSc6IDEuMjVcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1hcFsgZHluYW1pY0xhYmVsU2l6ZSBdO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0RHluYW1pY0xhYmVsVGV4dFNpemUgPSBmdW5jdGlvbiAoZWxlLCBkeW5hbWljTGFiZWxTaXplQ29lZmZpY2llbnQpIHtcbiAgICB2YXIgc2JnbmNsYXNzLCBoO1xuXG4gICAgLy8gZWxlIGNhbiBlaXRoZXIgYmUgbm9kZSBpdHNlbGYgb3IgYW4gb2JqZWN0IHRoYXQgaGFzIGNsYXNzIGFuZCBoZWlnaHQgZmllbGRzXG4gICAgaWYgKCBlbGUuaXNOb2RlICYmIGVsZS5pc05vZGUoKSApIHtcbiAgICAgIHNiZ25jbGFzcyA9IGVsZS5kYXRhKCAnY2xhc3MnICk7XG4gICAgICBoID0gZWxlLmhlaWdodCgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHNiZ25jbGFzcyA9IGVsZVsgJ2NsYXNzJyBdO1xuICAgICAgaCA9IGVsZVsgJ2hlaWdodCcgXTtcbiAgICB9XG5cbiAgICB2YXIgZHluYW1pY0xhYmVsU2l6ZSA9IG9wdGlvbnMuZHluYW1pY0xhYmVsU2l6ZTtcbiAgICBkeW5hbWljTGFiZWxTaXplID0gdHlwZW9mIGR5bmFtaWNMYWJlbFNpemUgPT09ICdmdW5jdGlvbicgPyBkeW5hbWljTGFiZWxTaXplLmNhbGwoKSA6IGR5bmFtaWNMYWJlbFNpemU7XG5cbiAgICBpZiAoZHluYW1pY0xhYmVsU2l6ZUNvZWZmaWNpZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChkeW5hbWljTGFiZWxTaXplID09ICdzbWFsbCcpIHtcbiAgICAgICAgaWYgKHNiZ25jbGFzcy5zdGFydHNXaXRoKFwiY29tcGxleFwiKSlcbiAgICAgICAgICByZXR1cm4gMTA7XG4gICAgICAgIGVsc2UgaWYgKHNiZ25jbGFzcyA9PSBcImNvbXBhcnRtZW50XCIgfHwgc2JnbmNsYXNzID09IFwic3VibWFwXCIpXG4gICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZHluYW1pY0xhYmVsU2l6ZSA9PSAncmVndWxhcicpIHtcbiAgICAgICAgaWYgKHNiZ25jbGFzcy5zdGFydHNXaXRoKFwiY29tcGxleFwiKSlcbiAgICAgICAgICByZXR1cm4gMTE7XG4gICAgICAgIGVsc2UgaWYgKHNiZ25jbGFzcyA9PSBcImNvbXBhcnRtZW50XCIgfHwgc2JnbmNsYXNzID09IFwic3VibWFwXCIpXG4gICAgICAgICAgcmV0dXJuIDE0O1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZHluYW1pY0xhYmVsU2l6ZSA9PSAnbGFyZ2UnKSB7XG4gICAgICAgIGlmIChzYmduY2xhc3Muc3RhcnRzV2l0aChcImNvbXBsZXhcIikpXG4gICAgICAgICAgcmV0dXJuIDEyO1xuICAgICAgICBlbHNlIGlmIChzYmduY2xhc3MgPT0gXCJjb21wYXJ0bWVudFwiIHx8IHNiZ25jbGFzcyA9PSBcInN1Ym1hcFwiKVxuICAgICAgICAgIHJldHVybiAxNjtcbiAgICAgIH1cblxuICAgICAgZHluYW1pY0xhYmVsU2l6ZUNvZWZmaWNpZW50ID0gZWxlbWVudFV0aWxpdGllcy5nZXREeW5hbWljTGFiZWxTaXplQ29lZmZpY2llbnQoIGR5bmFtaWNMYWJlbFNpemUgKTtcbiAgICB9XG5cbiAgICB2YXIgdGV4dEhlaWdodCA9IHBhcnNlSW50KGggLyAyLjQ1KSAqIGR5bmFtaWNMYWJlbFNpemVDb2VmZmljaWVudDtcblxuICAgIHJldHVybiB0ZXh0SGVpZ2h0O1xuICB9O1xuXG4gIC8qXG4gICogR2V0IHNvdXJjZS90YXJnZXQgZW5kIHBvaW50IG9mIGVkZ2UgaW4gJ3gtdmFsdWUlIHktdmFsdWUlJyBmb3JtYXQuIEl0IHJldHVybnMgJ291dHNpZGUtdG8tbm9kZScgaWYgdGhlcmUgaXMgbm8gc291cmNlL3RhcmdldCBwb3J0LlxuICAqL1xuICBlbGVtZW50VXRpbGl0aWVzLmdldEVuZFBvaW50ID0gZnVuY3Rpb24oZWRnZSwgc291cmNlT3JUYXJnZXQpIHtcbiAgICB2YXIgcG9ydElkID0gc291cmNlT3JUYXJnZXQgPT09ICdzb3VyY2UnID8gZWRnZS5kYXRhKCdwb3J0c291cmNlJykgOiBlZGdlLmRhdGEoJ3BvcnR0YXJnZXQnKTtcblxuICAgIGlmIChwb3J0SWQgPT0gbnVsbCB8fCAhZ3JhcGhVdGlsaXRpZXMucG9ydHNFbmFibGVkKSB7XG4gICAgICByZXR1cm4gJ291dHNpZGUtdG8tbm9kZSc7IC8vIElmIHRoZXJlIGlzIG5vIHBvcnRzb3VyY2UgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIHdoaWNoIGlzICdvdXRzaWRlLXRvLW5vZGUnXG4gICAgfVxuXG4gICAgdmFyIGVuZE5vZGUgPSBzb3VyY2VPclRhcmdldCA9PT0gJ3NvdXJjZScgPyBlZGdlLnNvdXJjZSgpIDogZWRnZS50YXJnZXQoKTtcbiAgICB2YXIgcG9ydHMgPSBlbmROb2RlLmRhdGEoJ3BvcnRzJyk7XG4gICAgdmFyIHBvcnQ7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3J0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHBvcnRzW2ldLmlkID09PSBwb3J0SWQpIHtcbiAgICAgICAgcG9ydCA9IHBvcnRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnb3V0c2lkZS10by1ub2RlJzsgLy8gSWYgcG9ydCBpcyBub3QgZm91bmQgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIHdoaWNoIGlzICdvdXRzaWRlLXRvLW5vZGUnXG4gICAgfVxuXG4gICAgdmFyIHgsIHk7XG4gICAgLy8gTm90ZSB0aGF0IGZvciBkcmF3aW5nIHBvcnRzIHdlIHJlcHJlc2VudCB0aGUgd2hvbGUgc2hhcGUgYnkgYSBwb2x5Z29uIGFuZCBwb3J0cyBhcmUgYWx3YXlzIDUwJSBhd2F5IGZyb20gdGhlIG5vZGUgY2VudGVyXG4gICAgaWYgKHBvcnQueCAhPSAwKSB7XG4gICAgICB4ID0gTWF0aC5zaWduKHBvcnQueCkgKiA1MDtcbiAgICAgIHkgPSAwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHggPSAwO1xuICAgICAgeSA9IE1hdGguc2lnbihwb3J0LnkpICogNTA7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnICsgeCArICclICcgKyB5ICsgJyUnO1xuICB9O1xuXG4gIC8qXG4gICAqIFJldHVybiBvcmRlcmluZyBvZiBwb3J0cyBvZiBhIG5vZGUuXG4gICAqIFBvc3NpYmxlIHJldHVybiB2YWx1ZXMgYXJlICdMLXRvLVInLCAnUi10by1MJywgJ1QtdG8tQicsICdCLXRvLVQnLCAnbm9uZSdcbiAgICovXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0UG9ydHNPcmRlcmluZyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgIC8vIFJldHVybiB0aGUgY2FjaGVkIHBvcnRzb3JkZXJpbmcgaWYgZXhpc3RzXG4gICBpZiAobm9kZS5kYXRhKCdwb3J0c29yZGVyaW5nJykpIHtcbiAgICAgcmV0dXJuIG5vZGUuZGF0YSgncG9ydHNvcmRlcmluZycpO1xuICAgfVxuXG4gICB2YXIgcG9ydHMgPSBub2RlLmRhdGEoJ3BvcnRzJyk7XG4gICBpZiAocG9ydHMubGVuZ3RoICE9PSAyKSB7XG4gICAgIG5vZGUuZGF0YSgncG9ydHNvcmRlcmluZycsICdub25lJyk7IC8vIENhY2hlIHRoZSBwb3J0cyBvcmRlcmluZ1xuICAgICByZXR1cm4gJ25vbmUnOyAvLyBOb2RlcyBhcmUgc3VwcG9zZWQgdG8gaGF2ZSAyIG5vZGVzIG9yIG5vbmVcbiAgIH1cblxuICAgLypcbiAgICAqIFJldHVyc24gaWYgdGhlIGdpdmVuIHBvcnRJZCBpcyBwb3J0dGFyZ2V0IG9mIGFueSBvZiB0aGUgZ2l2ZW4gZWRnZXMuXG4gICAgKiBUaGVzZSBlZGdlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgdGhlIGVkZ2VzIGNvbm5lY3RlZCB0byB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhhdCBwb3J0LlxuICAgICovXG4gICB2YXIgaXNQb3J0VGFyZ2V0T2ZBbnlFZGdlID0gZnVuY3Rpb24oZWRnZXMsIHBvcnRJZCkge1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgaWYgKGVkZ2VzW2ldLmRhdGEoJ3BvcnR0YXJnZXQnKSA9PT0gcG9ydElkKSB7XG4gICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICB9XG4gICAgIH1cblxuICAgICByZXR1cm4gZmFsc2U7XG4gICB9O1xuXG4gICAvLyBJZiB0aGUgcG9ydHMgYXJlIGxvY2F0ZWQgYWJvdmUvYmVsb3cgb2YgdGhlIG5vZGUgdGhlbiB0aGUgb3JpZW50YXRpb24gaXMgJ3ZlcnRpY2FsJyBlbHNlIGl0IGlzICdob3Jpem9udGFsJy5cbiAgIHZhciBvcmllbnRhdGlvbiA9IHBvcnRzWzBdLnggPT09IDAgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICAgLy8gV2UgbmVlZCB0aGUgY29ubmVjdGVkIGVkZ2VzIG9mIHRoZSBub2RlIHRvIGZpbmQgb3V0IGlmIGEgcG9ydCBpcyBhbiBpbnB1dCBwb3J0IG9yIGFuIG91dHB1dCBwb3J0XG4gICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLmNvbm5lY3RlZEVkZ2VzKCk7XG5cbiAgIHZhciBwb3J0c29yZGVyaW5nO1xuICAgaWYgKG9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgdmFyIGxlZnRQb3J0SWQgPSBwb3J0c1swXS54IDwgMCA/IHBvcnRzWzBdLmlkIDogcG9ydHNbMV0uaWQ7IC8vIExlZnQgcG9ydCBpcyB0aGUgcG9ydCB3aG9zZSB4IHZhbHVlIGlzIG5lZ2F0aXZlXG4gICAgIC8vIElmIGxlZnQgcG9ydCBpcyBwb3J0IHRhcmdldCBmb3IgYW55IG9mIGNvbm5lY3RlZCBlZGdlcyB0aGVuIHRoZSBvcmRlcmluZyBpcyAnTC10by1SJyBlbHNlIGl0IGlzICdSLXRvLUwnXG4gICAgIGlmIChpc1BvcnRUYXJnZXRPZkFueUVkZ2UoY29ubmVjdGVkRWRnZXMsIGxlZnRQb3J0SWQpKSB7XG4gICAgICAgcG9ydHNvcmRlcmluZyA9ICdMLXRvLVInO1xuICAgICB9XG4gICAgIGVsc2Uge1xuICAgICAgIHBvcnRzb3JkZXJpbmcgPSAnUi10by1MJztcbiAgICAgfVxuICAgfVxuICAgZWxzZSB7XG4gICAgIHZhciB0b3BQb3J0SWQgPSBwb3J0c1swXS55IDwgMCA/IHBvcnRzWzBdLmlkIDogcG9ydHNbMV0uaWQ7IC8vIFRvcCBwb3J0IGlzIHRoZSBwb3J0IHdob3NlIHkgdmFsdWUgaXMgbmVnYXRpdmVcbiAgICAgLy8gSWYgdG9wICBwb3J0IGlzIHBvcnQgdGFyZ2V0IGZvciBhbnkgb2YgY29ubmVjdGVkIGVkZ2VzIHRoZW4gdGhlIG9yZGVyaW5nIGlzICdULXRvLUInIGVsc2UgaXQgaXMgJ0ItdG8tVCdcbiAgICAgaWYgKGlzUG9ydFRhcmdldE9mQW55RWRnZShjb25uZWN0ZWRFZGdlcywgdG9wUG9ydElkKSkge1xuICAgICAgIHBvcnRzb3JkZXJpbmcgPSAnVC10by1CJztcbiAgICAgfVxuICAgICBlbHNlIHtcbiAgICAgICBwb3J0c29yZGVyaW5nID0gJ0ItdG8tVCc7XG4gICAgIH1cbiAgIH1cblxuICAgLy8gQ2FjaGUgdGhlIHBvcnRzb3JkZXJpbmcgYW5kIHJldHVybiBpdC5cbiAgIG5vZGUuZGF0YSgncG9ydHNvcmRlcmluZycsIHBvcnRzb3JkZXJpbmcpO1xuICAgcmV0dXJuIHBvcnRzb3JkZXJpbmc7XG4gIH07XG5cbiAgLypcbiAgKiBTZXRzIHRoZSBvcmRlcmluZyBvZiB0aGUgZ2l2ZW4gbm9kZXMuXG4gICogT3JkZXJpbmcgb3B0aW9ucyBhcmUgJ0wtdG8tUicsICdSLXRvLUwnLCAnVC10by1CJywgJ0ItdG8tVCcsICdub25lJy5cbiAgKiBJZiBhIG5vZGUgZG9lcyBub3QgaGF2ZSBhbnkgcG9ydCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBhbmQgaXQgaXMgc3VwcG9zZWQgdG8gaGF2ZSBzb21lIGFmdGVyIG9wZXJhdGlvbiB0aGUgcG9ydERpc3RhbmNlIHBhcmFtZXRlciBpc1xuICAqIHVzZWQgdG8gc2V0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBub2RlIGNlbnRlciBhbmQgdGhlIHBvcnRzLiBUaGUgZGVmYXVsdCBwb3J0IGRpc3RhbmNlIGlzIDYwLlxuICAqL1xuICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcgPSBmdW5jdGlvbiggbm9kZXMsIG9yZGVyaW5nLCBwb3J0RGlzdGFuY2UgKSB7XG4gICAgLypcbiAgICAqIFJldHVybnMgaWYgdGhlIGdpdmVuIHBvcnRJZCBpcyBwb3J0dGFyZ2V0IG9mIGFueSBvZiB0aGUgZ2l2ZW4gZWRnZXMuXG4gICAgKiBUaGVzZSBlZGdlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgdGhlIGVkZ2VzIGNvbm5lY3RlZCB0byB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggdGhhdCBwb3J0LlxuICAgICovXG4gICAgdmFyIGlzUG9ydFRhcmdldE9mQW55RWRnZSA9IGZ1bmN0aW9uKGVkZ2VzLCBwb3J0SWQpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGVkZ2VzW2ldLmRhdGEoJ3BvcnR0YXJnZXQnKSA9PT0gcG9ydElkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cblxuICAgIC8qXG4gICAgKiBSZXR1cm5zIGlmIHRoZSBnaXZlbiBwb3J0SWQgaXMgcG9ydHNvdXJjZSBvZiBhbnkgb2YgdGhlIGdpdmVuIGVkZ2VzLlxuICAgICogVGhlc2UgZWRnZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgcG9ydC5cbiAgICAqL1xuICAgIHZhciBpc1BvcnRTb3VyY2VPZkFueUVkZ2UgPSBmdW5jdGlvbihlZGdlcywgcG9ydElkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChlZGdlc1tpXS5kYXRhKCdwb3J0c291cmNlJykgPT09IHBvcnRJZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgcG9ydERpc3RhbmNlID0gcG9ydERpc3RhbmNlID8gcG9ydERpc3RhbmNlIDogNzA7IC8vIFRoZSBkZWZhdWx0IHBvcnQgZGlzdGFuY2UgaXMgNjBcblxuICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIHZhciBjdXJyZW50T3JkZXJpbmcgPSB0aGlzLmdldFBvcnRzT3JkZXJpbmcobm9kZSk7IC8vIFRoZSBjdXJyZW50IHBvcnRzIG9yZGVyaW5nIG9mIHRoZSBub2RlXG5cbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IG9yZGVyaW5nIGlzIGFscmVhZHkgZXF1YWwgdG8gdGhlIGRlc2lyZWQgb3JkZXJpbmcgcGFzcyB0aGlzIG5vZGUgZGlyZWN0bHlcbiAgICAgIGlmICggb3JkZXJpbmcgPT09IGN1cnJlbnRPcmRlcmluZyApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICggb3JkZXJpbmcgPT09ICdub25lJyApIHsgLy8gSWYgdGhlIG9yZGVyaW5nIGlzICdub25lJyByZW1vdmUgdGhlIHBvcnRzIG9mIHRoZSBub2RlXG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMucmVtb3ZlUG9ydHMobm9kZSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICggY3VycmVudE9yZGVyaW5nID09PSAnbm9uZScgKSB7IC8vIElmIHRoZSBkZXNpcmVkIG9yZGVyaW5nIGlzIG5vdCAnbm9uZScgYnV0IHRoZSBjdXJyZW50IG9uZSBpcyAnbm9uZScgYWRkIHBvcnRzIHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMuXG4gICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkUG9ydHMobm9kZSwgb3JkZXJpbmcsIHBvcnREaXN0YW5jZSk7XG4gICAgICB9XG4gICAgICBlbHNlIHsgLy8gRWxzZSBjaGFuZ2UgdGhlIG9yZGVyaW5nIGJ5IGFsdGVyaW5nIG5vZGUgJ3BvcnRzJ1xuICAgICAgICB2YXIgcG9ydHMgPSBub2RlLmRhdGEoJ3BvcnRzJyk7IC8vIFBvcnRzIG9mIHRoZSBub2RlXG4gICAgICAgIC8vIElmIGN1cnJlbnRPcmRlcmluZyBpcyAnbm9uZScgdXNlIHRoZSBwb3J0RGlzdGFuY2UgZ2l2ZW4gYnkgcGFyYW1ldGVyIGVsc2UgdXNlIHRoZSBleGlzdGluZyBvbmVcbiAgICAgICAgdmFyIGRpc3QgPSBjdXJyZW50T3JkZXJpbmcgPT09ICdub25lJyA/IHBvcnREaXN0YW5jZSA6ICggTWF0aC5hYnMoIHBvcnRzWzBdLnggKSB8fCBNYXRoLmFicyggcG9ydHNbMF0ueSApICk7XG4gICAgICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IG5vZGUuY29ubmVjdGVkRWRnZXMoKTsgLy8gVGhlIGVkZ2VzIGNvbm5lY3RlZCB0byB0aGUgbm9kZVxuICAgICAgICB2YXIgcG9ydHNvdXJjZSwgcG9ydHRhcmdldDsgLy8gVGhlIHBvcnRzIHdoaWNoIGFyZSBwb3J0c291cmNlL3BvcnR0YXJnZXQgb2YgdGhlIGNvbm5lY3RlZCBlZGdlc1xuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgcG9ydHNvdXJjZSBhbmQgcG9ydHRhcmdldFxuICAgICAgICBpZiAoIGlzUG9ydFRhcmdldE9mQW55RWRnZShjb25uZWN0ZWRFZGdlcywgcG9ydHNbMF0uaWQpIHx8IGlzUG9ydFNvdXJjZU9mQW55RWRnZShjb25uZWN0ZWRFZGdlcywgcG9ydHNbMV0uaWQpICkge1xuICAgICAgICAgIHBvcnR0YXJnZXQgPSBwb3J0c1swXTtcbiAgICAgICAgICBwb3J0c291cmNlID0gcG9ydHNbMV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcG9ydHRhcmdldCA9IHBvcnRzWzFdO1xuICAgICAgICAgIHBvcnRzb3VyY2UgPSBwb3J0c1swXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggb3JkZXJpbmcgPT09ICdMLXRvLVInICkge1xuICAgICAgICAgIC8vIElmIG9yZGVyaW5nIGlzICdMLXRvLVInIHRoZSBwb3J0dGFyZ2V0IHNob3VsZCBiZSB0aGUgbGVmdCBtb3N0IHBvcnQgYW5kIHRoZSBwb3J0c291cmNlIHNob3VsZCBiZSB0aGUgcmlnaHQgbW9zdCBwb3J0XG4gICAgICAgICAgcG9ydHRhcmdldC54ID0gLTEgKiBkaXN0O1xuICAgICAgICAgIHBvcnRzb3VyY2UueCA9IGRpc3Q7XG4gICAgICAgICAgcG9ydHRhcmdldC55ID0gMDtcbiAgICAgICAgICBwb3J0c291cmNlLnkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCBvcmRlcmluZyA9PT0gJ1ItdG8tTCcgKSB7XG4gICAgICAgICAgLy8gSWYgb3JkZXJpbmcgaXMgJ1ItdG8tTCcgdGhlIHBvcnR0YXJnZXQgc2hvdWxkIGJlIHRoZSByaWdodCBtb3N0IHBvcnQgYW5kIHRoZSBwb3J0c291cmNlIHNob3VsZCBiZSB0aGUgbGVmdCBtb3N0IHBvcnRcbiAgICAgICAgICBwb3J0dGFyZ2V0LnggPSBkaXN0O1xuICAgICAgICAgIHBvcnRzb3VyY2UueCA9IC0xICogZGlzdDtcbiAgICAgICAgICBwb3J0dGFyZ2V0LnkgPSAwO1xuICAgICAgICAgIHBvcnRzb3VyY2UueSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIG9yZGVyaW5nID09PSAnVC10by1CJyApIHtcbiAgICAgICAgICAvLyBJZiBvcmRlcmluZyBpcyAnVC10by1CJyB0aGUgcG9ydHRhcmdldCBzaG91bGQgYmUgdGhlIHRvcCBtb3N0IHBvcnQgYW5kIHRoZSBwb3J0c291cmNlIHNob3VsZCBiZSB0aGUgYm90dG9tIG1vc3QgcG9ydFxuICAgICAgICAgIHBvcnR0YXJnZXQueCA9IDA7XG4gICAgICAgICAgcG9ydHNvdXJjZS54ID0gMDtcbiAgICAgICAgICBwb3J0dGFyZ2V0LnkgPSAtMSAqIGRpc3Q7XG4gICAgICAgICAgcG9ydHNvdXJjZS55ID0gZGlzdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlICB7IC8vaWYgb3JkZXJpbmcgaXMgJ0ItdG8tVCdcbiAgICAgICAgICAvLyBJZiBvcmRlcmluZyBpcyAnQi10by1UJyB0aGUgcG9ydHRhcmdldCBzaG91bGQgYmUgdGhlIGJvdHRvbSBtb3N0IHBvcnQgYW5kIHRoZSBwb3J0c291cmNlIHNob3VsZCBiZSB0aGUgdG9wIG1vc3QgcG9ydFxuICAgICAgICAgIHBvcnR0YXJnZXQueCA9IDA7XG4gICAgICAgICAgcG9ydHNvdXJjZS54ID0gMDtcbiAgICAgICAgICBwb3J0dGFyZ2V0LnkgPSBkaXN0O1xuICAgICAgICAgIHBvcnRzb3VyY2UueSA9IC0xICogZGlzdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBub2RlLmRhdGEoJ3BvcnRzJywgcG9ydHMpOyAvLyBSZXNldCB0aGUgbm9kZSBwb3J0c1xuICAgIH1cblxuICAgIG5vZGVzLmRhdGEoJ3BvcnRzb3JkZXJpbmcnLCBvcmRlcmluZyk7IC8vIFVwZGF0ZSB0aGUgY2FjaGVkIG9yZGVyaW5ncyBvZiB0aGUgbm9kZXNcbiAgICBjeS5lbmRCYXRjaCgpO1xuICB9O1xuXG4gIC8qXG4gICogQWRkIHBvcnRzIHRvIHRoZSBnaXZlbiBub2RlLCB3aXRoIGdpdmVuIG9yZGVyaW5nIGFuZCBwb3J0IGRpc3RhbmNlLlxuICAqL1xuICBlbGVtZW50VXRpbGl0aWVzLmFkZFBvcnRzID0gZnVuY3Rpb24obm9kZSwgb3JkZXJpbmcsIHBvcnREaXN0YW5jZSkge1xuICAgIHZhciBmaXJzdFBvcnRJZCA9IG5vZGUuaWQoKSArIFwiLjFcIjsgLy8gSWQgb2YgZmlyc3QgcG9ydFxuICAgIHZhciBzZWNvbmRQb3J0SWQgPSBub2RlLmlkKCkgKyBcIi4yXCI7IC8vIElkIG9mIHNlY29uZiBwb3J0XG4gICAgLy8gRmlyc3QgcG9ydCBvYmplY3QgeCBhbmQgeSB3aWxsIGJlIGZpbGxlZCBhY2NvcmRpbmcgdG8gb3JkZXJpbmcsIHRoZSBmaXJzdCBwb3J0IGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBsZWZ0IG1vc3Qgb3IgdGhlIHRvcCBtb3N0IG9uZVxuICAgIHZhciBmaXJzdFBvcnQgPSB7IGlkOiBmaXJzdFBvcnRJZCB9O1xuICAgIC8vIFNlY29uZCBwb3J0IG9iamVjdCB4IGFuZCB5IHdpbGwgYmUgZmlsbGVkIGFjY29yZGluZyB0byBvcmRlcmluZywgdGhlIHNlY29uZCBwb3J0IGlzIHN1cHBvc2VkIHRvIGJlIHRoZSByaWdodCBtb3N0IG9yIHRoZSBib3R0b20gbW9zdCBvbmVcbiAgICB2YXIgc2Vjb25kUG9ydCA9IHsgaWQ6IHNlY29uZFBvcnRJZCB9O1xuXG4gICAgLy8gQ29tcGxldGUgcG9ydCBvYmplY3RzIGFjY29yZGluZyB0byBvcmRlcmluZ1xuICAgIGlmICggb3JkZXJpbmcgPT09ICdMLXRvLVInIHx8IG9yZGVyaW5nID09PSAnUi10by1MJyApIHtcbiAgICAgIC8vIElmIG9yZGVyaW5nIGlzIGluIGhvcml6b250YWwgYXhpcyBmaXJzdCBwb3J0IGlzIHRoZSBsZWZ0IG1vc3Qgb25lIGFuZCB0aGUgc2Vjb25kIHBvcnQgaXMgdGhlIHJpZ2h0IG1vc3Qgb25lXG4gICAgICBmaXJzdFBvcnQueCA9IC0xICogcG9ydERpc3RhbmNlO1xuICAgICAgc2Vjb25kUG9ydC54ID0gcG9ydERpc3RhbmNlO1xuICAgICAgZmlyc3RQb3J0LnkgPSAwO1xuICAgICAgc2Vjb25kUG9ydC55ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7IC8vIElmIG9yZGVyaW5nIGlzICdULXRvLUInIG9yICdCLXRvLVQnXG4gICAgICAgLy8gSWYgb3JkZXJpbmcgaXMgaW4gdmVydGljYWwgYXhpcyBmaXJzdCBwb3J0IGlzIHRoZSB0b3AgbW9zdCBvbmUgYW5kIHRoZSBzZWNvbmQgcG9ydCBpcyB0aGUgYm90dG9tIG1vc3Qgb25lXG4gICAgICBmaXJzdFBvcnQueSA9IC0xICogcG9ydERpc3RhbmNlO1xuICAgICAgc2Vjb25kUG9ydC55ID0gcG9ydERpc3RhbmNlO1xuICAgICAgZmlyc3RQb3J0LnggPSAwO1xuICAgICAgc2Vjb25kUG9ydC54ID0gMDtcbiAgICB9XG5cbiAgICB2YXIgZnJvbUxvclQgPSBvcmRlcmluZyA9PT0gJ0wtdG8tUicgfHwgb3JkZXJpbmcgPT09ICdULXRvLUInOyAvLyBDaGVjayBpZiBvcmRlcmluZyBzdGFydHMgZnJvbSBsZWZ0IG9yIHRvcFxuICAgIHZhciBwb3J0cyA9IFtmaXJzdFBvcnQsIHNlY29uZFBvcnRdOyAvLyBQb3J0cyBhcnJheSBmb3IgdGhlIG5vZGVcbiAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLmNvbm5lY3RlZEVkZ2VzKCk7IC8vIFRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGVcblxuICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgIG5vZGUuZGF0YSgncG9ydHMnLCBwb3J0cyk7XG5cbiAgICAvLyBSZXNldCB0aGUgcG9ydHNvdXJjZSBhbmQgcG9ydHRhcmdldCBmb3IgZWFjaCBlZGdlIGNvbm5lY3RlZCB0byB0aGUgbm9kZVxuICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGNvbm5lY3RlZEVkZ2VzLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRFZGdlc1tpXTtcbiAgICAgIHZhciBlZGdlQ2xhc3MgPSBlZGdlLmRhdGEoJ2NsYXNzJyk7XG4gICAgICAvKlxuICAgICAgICogSWYgdGhlIG5vZGUgaXMgdGhlIGVkZ2UgdGFyZ2V0IHdlIG1heSBuZWVkIHRvIHNldCB0aGUgcG9ydHRhcmdldCBvZiB0aGUgZWRnZSB0byB0aGUgaW5wdXQgcG9ydCBvZiB0aGUgbm9kZSAoRmlyc3Qgb3Igc2Vjb25kIHBvcnQgYWNjb3JpbmcgdG8gdGhlIG9yaWVudGF0aW9uKVxuICAgICAgICogaWYgaXQgaXMgdGhlIGVkZ2Ugc29ydWNlIHdlIG1heSBuZWVkIHRvIHNldCB0aGUgcG9ydHNvdXJjZSBvZiB0aGUgZWRnZSB0byB0aGUgb3V0cHV0IHBvcnQgc2ltaWxhcmx5LlxuICAgICAgICogTm90ZSB0aGF0IGlmIGZyb24gbGVmdCBvciB0b3AgKGZyb21Mb3JUKSBpcyB0cnVlIHRoZW4gdGhlIGZpcnN0IHBvcnQgaXMgdGhlIHNvdXJjZSBwb3J0IGFuZCBzZWNvbmQgcG9ydCBpcyB0aGUgdGFyZ2V0IHBvcnQsXG4gICAgICAgKiBlbHNlIGl0IGlzIHZpY2UgdmVyc2EuXG4gICAgICAgKlxuICAgICAgICovXG4gICAgICBpZiAoIGVkZ2UuZGF0YSgndGFyZ2V0JykgPT09IG5vZGUuaWQoKSApIHtcbiAgICAgICAgaWYgKGVkZ2VDbGFzcyA9PT0gJ3Byb2R1Y3Rpb24nIHx8IHRoaXMuaXNNb2R1bGF0aW9uQXJjQ2xhc3MoZWRnZUNsYXNzKSkge1xuICAgICAgICAgIGNvbnRpbnVlOyAvLyBwcm9kdWN0aW9uIG9yIG1vZHVsYXRpb24gdHlwZSBvZiBlZGdlcyBjYW5ub3QgYmUgY29ubmVjdGVkIHRvIGFueSBwb3J0IG9mIHRhcmdldCBub2RlIChBIHByb2R1Y3Rpb24gY2FuIGhhdmUgYSBwcm9jZXNzIGFzIHRhcmdldCBub2RlIGJ1dCBpdCBpcyBzdXBwb3NlZCB0byBiZSBjb25uZWN0ZWQgdG8gdGhhdCBub2RlIGZyb20gaXRzIGJvZHksIG5vdCBmcm9tIGEgcG9ydClcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGZyb21Mb3JUICkge1xuICAgICAgICAgIGVkZ2UuZGF0YSgncG9ydHRhcmdldCcsIGZpcnN0UG9ydElkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBlZGdlLmRhdGEoJ3BvcnR0YXJnZXQnLCBzZWNvbmRQb3J0SWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGVkZ2VDbGFzcyA9PT0gJ2NvbnN1bXB0aW9uJykge1xuICAgICAgICAgIGNvbnRpbnVlOyAvLyBjb25zdW1waXRvbiBlZGdlIGNhbm5vdCBiZSBjb25uZWN0ZWQgdG8gYW55IHBvcnQgb2Ygc291cmNlIG5vZGVcbiAgICAgICAgfVxuICAgICAgICBpZiAoIGZyb21Mb3JUICkge1xuICAgICAgICAgIGVkZ2UuZGF0YSgncG9ydHNvdXJjZScsIHNlY29uZFBvcnRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZWRnZS5kYXRhKCdwb3J0c291cmNlJywgZmlyc3RQb3J0SWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3kuZW5kQmF0Y2goKTtcbiAgfTtcblxuICAvKlxuICAqIFJlbW92ZSB0aGUgcG9ydHMgb2YgdGhlIGdpdmVuIG5vZGVcbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5yZW1vdmVQb3J0cyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLmNvbm5lY3RlZEVkZ2VzKCk7XG4gICAgdmFyIG5vZGVJZCA9IG5vZGUuaWQoKTtcblxuICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgIC8vIFJlc2V0IHBvcnRzb3VyY2Ugb3IgcG9ydHRhcmdldCBvZiB0aGUgY29ubmVjdGVkIGVkZ2VzIHRvIHRoZSBub2RlIGlkXG4gICAgZm9yICggdmFyIGkgPSAwOyBpIDwgY29ubmVjdGVkRWRnZXMubGVuZ3RoOyBpKysgKSB7XG4gICAgICB2YXIgZWRnZSA9IGNvbm5lY3RlZEVkZ2VzW2ldO1xuICAgICAgaWYgKCBlZGdlLmRhdGEoJ3NvdXJjZScpID09PSBub2RlSWQgKSB7XG4gICAgICAgIGVkZ2UuZGF0YSgncG9ydHNvdXJjZScsIG5vZGVJZCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZWRnZS5kYXRhKCdwb3J0dGFyZ2V0Jywgbm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlLmRhdGEoJ3BvcnRzJywgW10pOyAvLyBDbGVhciBwb3J0cyBkYXRhXG5cbiAgICBjeS5lbmRCYXRjaCgpO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlUG9ydHNPcmllbnRhdGlvbkFmdGVyTGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAvL0NoZWNrIGFsbCBwcm9jZXNzZXMgYW5kIGxvZ2ljYWwgb3BlcmF0b3JzIHdpdGggcG9ydHNcbiAgICAgIGN5Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihlbGUpe1xuICAgICAgICAgIGlmIChlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ3Byb2Nlc3MnIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnb21pdHRlZCBwcm9jZXNzJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ3VuY2VydGFpbiBwcm9jZXNzJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ2Fzc29jaWF0aW9uJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ2Rpc3NvY2lhdGlvbicgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdhbmQnIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnb3InIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnbm90JylcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmICggZWxlLmRhdGEoJ3BvcnRzJykubGVuZ3RoID09PSAyIClcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdmFyIGJlc3RPcmllbnRhdGlvbiA9IGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlUG9ydHNPcmllbnRhdGlvbihlbGUpO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKGVsZSwgYmVzdE9yaWVudGF0aW9uKTtcbiAgICAgICAgICAgICAgICAgIC8vIElmIGltcHJvdmUtZmxvdyBpcyBjaGVja2VkIHdlIGRvIHRoZSBzd2FwaW5nIG9mIHNpbXBsZSBub2RlcyB3aXRoIGVhY2ggb3RoZXJcbiAgICAgICAgICAgICAgICAgIHZhciBpbXByb3ZlRmxvdyA9IG9wdGlvbnMuaW1wcm92ZUZsb3c7XG4gICAgICAgICAgICAgICAgICBpbXByb3ZlRmxvdyA9IHR5cGVvZiBpbXByb3ZlRmxvdyA9PT0gJ2Z1bmN0aW9uJyA/IGltcHJvdmVGbG93LmNhbGwoKSA6IGltcHJvdmVGbG93O1xuICAgICAgICAgICAgICAgICAgaWYgKGltcHJvdmVGbG93KVxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMucG9zdENoYW5nZVBvcnRzT3JpZW50YXRpb24oZWxlLCBiZXN0T3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8qXG4gICBDYWxjdWxhdGVzIHRoZSBiZXN0IG9yaWVudGF0aW9uIGZvciBhbiAnZWxlJyB3aXRoIHBvcnQgKHByb2Nlc3Mgb3IgbG9naWNhbCBvcGVyYXRvcikgYW5kIHJldHVybnMgaXQuXG4gICAqL1xuICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZVBvcnRzT3JpZW50YXRpb24gPSBmdW5jdGlvbihlbGUpIHtcbiAgICAgIHZhciBwcm9jZXNzSWQgPSBlbGUuaWQoKTtcbiAgICAgIHZhciBvcmllbnRhdGlvbiA9IHsnTC10by1SJzogMCwgJ1ItdG8tTCcgOiAwLCAnVC10by1CJyA6IDAsICdCLXRvLVQnIDogMH07XG4gICAgICB2YXIgdGFyZ2V0aW5nRWRnZXMgPSBjeS5lZGdlcyhcIlt0YXJnZXQ9J1wiK3Byb2Nlc3NJZCtcIiddXCIpOyAvLyBIb2xkcyBlZGdlcyB3aG8gaGF2ZSB0aGUgaW5wdXQgcG9ydCBhcyBhIHRhcmdldFxuICAgICAgdmFyIHNvdXJjaW5nRWRnZXMgPSBjeS5lZGdlcyhcIltzb3VyY2U9J1wiK3Byb2Nlc3NJZCtcIiddXCIpOyAvLyBIb2xkcyBlZGdlcyB3aG8gaGF2ZSB0aGUgb3V0cHV0IHBvcnQgYXMgYSBzb3VyY2VcbiAgICAgIC8vIENoZWNrcyBpZiB0aGUgcG9ydHMgYmVsb25nIHRvIGEgcHJvY2VzcyBvciBsb2dpYWwgb3BlcmF0b3IsIGl0IGRvZXMgdGhlIGNhbGN1bGF0aW9ucyBiYXNlZCBvbiB0aGUgZWRnZXMgY29ubmVjdGVkIHRvIGl0cyBwb3J0c1xuICAgICAgaWYgKGVsZS5kYXRhKCdjbGFzcycpID09PSAncHJvY2VzcycgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdvbWl0dGVkIHByb2Nlc3MnIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAndW5jZXJ0YWluIHByb2Nlc3MnIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnYXNzb2NpYXRpb24nIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnZGlzc29jaWF0aW9uJylcbiAgICAgIHtcbiAgICAgICAgICB0YXJnZXRpbmdFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2Upe1xuICAgICAgICAgICAgICBpZiAoZWRnZS5kYXRhKCdjbGFzcycpID09PSAnY29uc3VtcHRpb24nKVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWRnZS5kYXRhKCdzb3VyY2UnKSk7IC8vSG9sZHMgdGhlIGVsZW1lbnQgZnJvbSB0aGUgb3RoZXIgc2lkZSBvZiBlZGdlXG4gICAgICAgICAgICAgICAgICB2YXIgc2ltcGxlID0gZmFsc2U7IC8vQ2hlY2tzIGlmIGl0IGlzIGEgc2ltcGxlIG5vZGUgLSBjb25uZWN0ZWQgd2l0aCBvbmx5IDEgZWRnZVxuICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICBzaW1wbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVPcmllbnRhdGlvblNjb3JlKGVsZSwgc291cmNlLCBvcmllbnRhdGlvbiwgJ0wtdG8tUicsICdSLXRvLUwnLCAneCcsIHNpbXBsZSk7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU9yaWVudGF0aW9uU2NvcmUoZWxlLCBzb3VyY2UsIG9yaWVudGF0aW9uLCAnVC10by1CJywgJ0ItdG8tVCcsICd5Jywgc2ltcGxlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNvdXJjaW5nRWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICAgICAgICBpZiAoZWRnZS5kYXRhKCdjbGFzcycpID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBjeS5nZXRFbGVtZW50QnlJZChlZGdlLmRhdGEoJ3RhcmdldCcpKTtcbiAgICAgICAgICAgICAgICAgIHZhciBzaW1wbGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgc2ltcGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlT3JpZW50YXRpb25TY29yZShlbGUsIHRhcmdldCwgb3JpZW50YXRpb24sICdSLXRvLUwnLCAnTC10by1SJywgJ3gnLCBzaW1wbGUpO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVPcmllbnRhdGlvblNjb3JlKGVsZSwgdGFyZ2V0LCBvcmllbnRhdGlvbiwgJ0ItdG8tVCcsICdULXRvLUInLCAneScsIHNpbXBsZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGVsZS5kYXRhKCdjbGFzcycpID09PSAnYW5kJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ29yJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ25vdCcpXG4gICAgICB7XG4gICAgICAgICAgdGFyZ2V0aW5nRWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgICAgICAgaWYgKGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ2xvZ2ljIGFyYycpXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBjeS5nZXRFbGVtZW50QnlJZChlZGdlLmRhdGEoJ3NvdXJjZScpKTtcbiAgICAgICAgICAgICAgICAgIHZhciBzaW1wbGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgc2ltcGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlT3JpZW50YXRpb25TY29yZShlbGUsIHNvdXJjZSwgb3JpZW50YXRpb24sICdMLXRvLVInLCAnUi10by1MJywgJ3gnLCBzaW1wbGUpO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVPcmllbnRhdGlvblNjb3JlKGVsZSwgc291cmNlLCBvcmllbnRhdGlvbiwgJ1QtdG8tQicsICdCLXRvLVQnLCAneScsIHNpbXBsZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzb3VyY2luZ0VkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAgICAgaWYgKGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ21vZHVsYXRpb24nIHx8IGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ3N0aW11bGF0aW9uJyB8fCBlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICdjYXRhbHlzaXMnIHx8IGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ2luaGliaXRpb24nIHx8IGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ25lY2Vzc2FyeSBzdGltdWxhdGlvbicgfHwgZWRnZS5kYXRhKCdjbGFzcycpID09PSAnbG9naWMgYXJjJykge1xuICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGN5LmdldEVsZW1lbnRCeUlkKGVkZ2UuZGF0YSgndGFyZ2V0JykpO1xuICAgICAgICAgICAgICAgICAgdmFyIHNpbXBsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25uZWN0ZWRFZGdlcygpLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgICAgICAgICAgICBzaW1wbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVPcmllbnRhdGlvblNjb3JlKGVsZSwgdGFyZ2V0LCBvcmllbnRhdGlvbiwgJ1ItdG8tTCcsICdMLXRvLVInLCAneCcsIHNpbXBsZSk7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU9yaWVudGF0aW9uU2NvcmUoZWxlLCB0YXJnZXQsIG9yaWVudGF0aW9uLCAnQi10by1UJywgJ1QtdG8tQicsICd5Jywgc2ltcGxlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy9DYWxjdWxhdGVzIHRoZSBiZXN0IG9yaWVudGF0aW9uIGZyb20gYWxsIG9yaWVudGF0aW9uIHNjb3Jlc1xuICAgICAgdmFyIGJlc3RPcmllbnRhdGlvbiA9IFwiTC10by1SXCI7XG4gICAgICB2YXIgYmVzdFNjb3JlID0gb3JpZW50YXRpb25bJ0wtdG8tUiddOy8vVGhlIHNjb3JlIG9mIHRoZSBiZXN0IG9yaWVudGF0aW9uIGlzIGFsd2F5cyBwb3NpdGl2ZVxuICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gb3JpZW50YXRpb24pIHtcbiAgICAgICAgICBpZiAob3JpZW50YXRpb25bcHJvcGVydHldID4gYmVzdFNjb3JlKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYmVzdFNjb3JlID0gb3JpZW50YXRpb25bcHJvcGVydHldO1xuICAgICAgICAgICAgICBiZXN0T3JpZW50YXRpb24gPSBwcm9wZXJ0eTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYmVzdE9yaWVudGF0aW9uO1xuICB9O1xuXG4gIC8qXG4gICBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHNjb3JlcyBmb3IgZWFjaCBvcmllbnRhdGlvblxuICAgQHBhcmFtIGVsZSAtIGlzIHRoZSBub2RlIChwcm9jZXNzLCBsb2dpY2FsIG9wZXJhdG9yKSB3aG9zZSBvcmllbnRhdGlvbiB3aWxsIGJlIGNoYW5nZWQuIEl0IGNhbiBiZSBwcm9jZXNzLG9taXR0ZWQgcHJvY2VzcyxcbiAgIHVuY2VydGFpbiBwcm9jZXNzLCBhc3NvY2lhdGlvbiwgZGlzc29jaWF0aW9uLCBsb2dpY2FsIG9wZXJhdG9yXG4gICBAcGFyYW0gb3RoZXIgLSBpcyB0aGUgb3RoZXIgbm9kZSwgYW5kIGJhc2VkIG9uIGl0cyBwb3NpdGlvbiBzY29yZXMgYXJlIGdpdmVuIHRvIG9yaWVudGF0aW9uc1xuICAgQHBhcmFtIG9yaWVudGF0aW9uIC0gaG9sZHMgc2NvcmVzIGZvciBlYWNoIG9yaWVudGF0aW9uXG4gICBAcGFyYW0gZmlyc3RPcmllbnRhdGlvbiAtIGNhbiBiZSBMLXRvLVIgb3IgVC10by1CXG4gICBAcGFyYW0gb3Bwb3NpdGVPcmllbnRhdGlvbiAtIG9wcG9zaXRlIG9mIHRoZSB1cHBlciBvcmllbnRhdGlvbiAoUi10by1MICwgQi10by1UKVxuICAgQHBhcmFtIHBvcyAtIGNhbiBiZSAneCcgb3IgJ3knIChiYXNlZCBvbiB2ZXJ0aWNhbCBvciBob3Jpem9udGFsIGRpcmVjdGlvbiBvZiBwb3J0cylcbiAgIEBwYXJhbSBzaW1wbGUgLSBjaGVja3MgaWYgJ290aGVyJyBub2RlIGlzIHNpbXBsZSBub2RlICh3aXRoIGRlZ3JlZSAxKVxuICAgKi9cbiAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlT3JpZW50YXRpb25TY29yZSA9IGZ1bmN0aW9uKGVsZSwgb3RoZXIsIG9yaWVudGF0aW9uLCBmaXJzdE9yaWVudGF0aW9uLCBvcHBvc2l0ZU9yaWVudGF0aW9uLCBwb3MsIHNpbXBsZSkge1xuICAgICB2YXIgY29lZmYgPSAwLjU7XG4gICAgIHZhciBzY29yZSA9IDI7XG4gICAgIGlmIChzaW1wbGUpXG4gICAgICAgICBzY29yZSA9IDE7IC8vIElmIGl0IGlzIGEgc2ltcGxlIG5vZGUsIGl0cyBzY29yZSBzaG91bGQgYWZmZWN0IGxlc3NcbiAgICAgdmFyIG5vZGVXaWR0aE9ySGVpZ2h0ID0gMDtcbiAgICAgaWYgKHBvcyA9PT0gJ3gnKVxuICAgICAgICAgbm9kZVdpZHRoT3JIZWlnaHQgPSBlbGUud2lkdGgoKS8yO1xuICAgICBlbHNlIGlmIChwb3MgPT09J3knKVxuICAgICAgICAgbm9kZVdpZHRoT3JIZWlnaHQgPSBlbGUuaGVpZ2h0KCkvMjtcbiAgICAgaWYgKG90aGVyLnBvc2l0aW9uKHBvcykgPCBlbGUucG9zaXRpb24ocG9zKSAtIG5vZGVXaWR0aE9ySGVpZ2h0KVxuICAgICB7XG4gICAgICAgICBvcmllbnRhdGlvbltmaXJzdE9yaWVudGF0aW9uXSArPSBzY29yZTtcbiAgICAgICAgIG9yaWVudGF0aW9uW29wcG9zaXRlT3JpZW50YXRpb25dIC09IHNjb3JlO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKG90aGVyLnBvc2l0aW9uKHBvcykgPj0gZWxlLnBvc2l0aW9uKHBvcykgLSBub2RlV2lkdGhPckhlaWdodCAmJiBvdGhlci5wb3NpdGlvbihwb3MpIDw9IGVsZS5wb3NpdGlvbihwb3MpICsgbm9kZVdpZHRoT3JIZWlnaHQpXG4gICAgIHtcbiAgICAgICAgIG9yaWVudGF0aW9uW2ZpcnN0T3JpZW50YXRpb25dICs9IChlbGUucG9zaXRpb24ocG9zKSAtIG90aGVyLnBvc2l0aW9uKHBvcykpL25vZGVXaWR0aE9ySGVpZ2h0KmNvZWZmO1xuICAgICAgICAgb3JpZW50YXRpb25bb3Bwb3NpdGVPcmllbnRhdGlvbl0gLT0gKGVsZS5wb3NpdGlvbihwb3MpIC0gb3RoZXIucG9zaXRpb24ocG9zKSkvbm9kZVdpZHRoT3JIZWlnaHQqY29lZmY7XG4gICAgIH1cbiAgICAgZWxzZSBpZiAob3RoZXIucG9zaXRpb24ocG9zKSA+ICBlbGUucG9zaXRpb24ocG9zKSArIG5vZGVXaWR0aE9ySGVpZ2h0KVxuICAgICB7XG4gICAgICAgICBvcmllbnRhdGlvbltmaXJzdE9yaWVudGF0aW9uXSAtPSBzY29yZTtcbiAgICAgICAgIG9yaWVudGF0aW9uW29wcG9zaXRlT3JpZW50YXRpb25dICs9IHNjb3JlO1xuICAgICB9XG4gIH07XG5cbiAgLypcbiAgQWZ0ZXIgYSBwcm9jZXNzIGlzIG9yaWVudGVkLCBmb3IgZWFjaCBzaW1wbGUgbm9kZSB0aGF0IGlzIG9uIHRoZSB3cm9uZyBzaWRlIG9mIHRoZSBwb3J0LFxuICB3ZSB0cnkgdG8gZmluZCBhbm90aGVyIHNpbXBsZSBub2RlIG9mIGRlZ3JlZSAwIG9uIHRoZSBvcHBvc2l0ZSBzaWRlIGFuZCBzd2FwIHRoZW0gYWZ0ZXJ3YXJkcy5cbiAgSWYgZnJvbSB0aGUgb3Bwb3NpZGUgc2lkZSB3ZSBjYW5ub3QgZmluZCBzdWNoIGEgbm9kZSB0aGVuIHdlIHRyeSB0byBzd2FwIGl0IHdpdGggYW4gZWZmZWN0b3Igbm9kZSBvZiBkZWdyZWUgMVxuICAqL1xuICBlbGVtZW50VXRpbGl0aWVzLnBvc3RDaGFuZ2VQb3J0c09yaWVudGF0aW9uID0gZnVuY3Rpb24oZWxlLCBiZXN0T3JpZW50YXRpb24pIHtcbiAgICAgIHZhciBwcm9jZXNzSWQgPSBlbGUuaWQoKTtcbiAgICAgIHZhciBpbnB1dFBvcnQgPSBbXTsgLy8gSG9sZHMgYWxsIHNpbXBsZSBub2RlcyBjb25uZWN0ZWQgd2l0aCBpbnB1dCBwb3J0XG4gICAgICB2YXIgb3V0cHV0UG9ydCA9IFtdOyAvLyBIb2xkcyBhbGwgc2ltcGxlIG5vZGVzIGNvbm5lY3RlZCB3aXRoIG91dHB1dCBwb3J0XG4gICAgICB2YXIgbm90Q29ubmVjdGVkVG9Qb3J0ID0gW107IC8vIEhvbGRzIGFsbCBzaW1wbGUgbm9kZXMgbm90IGNvbm5lY3RlZCB3aXRoIGlucHV0IG9yIG91dHB1dCBwb3J0XG4gICAgICB2YXIgdGFyZ2V0aW5nRWRnZXMgPSBjeS5lZGdlcyhcIlt0YXJnZXQ9J1wiK3Byb2Nlc3NJZCtcIiddXCIpO1xuICAgICAgdmFyIHNvdXJjaW5nRWRnZXMgPSBjeS5lZGdlcyhcIltzb3VyY2U9J1wiK3Byb2Nlc3NJZCtcIiddXCIpO1xuICAgICAgLy8gQ2hlY2tzIHNpbXBsZSBub2RlcyBhbmQgYWRkIHRoZW0gdG8gb25lIG9mIHRoZSBhcnJheXMgbWVudGlvbmVkIGFib3ZlXG4gICAgICBpZiAoZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdwcm9jZXNzJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ29taXR0ZWQgcHJvY2VzcycgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICd1bmNlcnRhaW4gcHJvY2VzcycgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdhc3NvY2lhdGlvbicgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdkaXNzb2NpYXRpb24nKVxuICAgICAge1xuICAgICAgICAgIHRhcmdldGluZ0VkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBjeS5nZXRFbGVtZW50QnlJZChlZGdlLmRhdGEoJ3NvdXJjZScpKTtcbiAgICAgICAgICAgICAgaWYoIXNvdXJjZS5pc1BhcmVudCgpKXtcbiAgICAgICAgICAgICAgICBpZiAoZWRnZS5kYXRhKCdjbGFzcycpID09PSAnY29uc3VtcHRpb24nKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTaW1wbGVOb2RlVG9BcnJheShlbGUsIHNvdXJjZSwgYmVzdE9yaWVudGF0aW9uLCBpbnB1dFBvcnQsIFwiaW5wdXRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU2ltcGxlTm9kZVRvQXJyYXkoZWxlLCBzb3VyY2UsIGJlc3RPcmllbnRhdGlvbiwgbm90Q29ubmVjdGVkVG9Qb3J0LCBcIm5vdENvbm5lY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzb3VyY2luZ0VkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGN5LmdldEVsZW1lbnRCeUlkKGVkZ2UuZGF0YSgndGFyZ2V0JykpO1xuICAgICAgICAgICAgICBpZighdGFyZ2V0LmlzUGFyZW50KCkpe1xuICAgICAgICAgICAgICAgIGlmIChlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFNpbXBsZU5vZGVUb0FycmF5KGVsZSwgdGFyZ2V0LCBiZXN0T3JpZW50YXRpb24sIG91dHB1dFBvcnQsIFwib3V0cHV0XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFNpbXBsZU5vZGVUb0FycmF5KGVsZSwgdGFyZ2V0LCBiZXN0T3JpZW50YXRpb24sIG5vdENvbm5lY3RlZFRvUG9ydCwgXCJub3RDb25uZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ2FuZCcgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdvcicgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdub3QnKVxuICAgICAge1xuICAgICAgICAgIHRhcmdldGluZ0VkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBjeS5nZXRFbGVtZW50QnlJZChlZGdlLmRhdGEoJ3NvdXJjZScpKTtcbiAgICAgICAgICAgICAgaWYoIXNvdXJjZS5pc1BhcmVudCgpKXtcbiAgICAgICAgICAgICAgICBpZiAoZWRnZS5kYXRhKCdjbGFzcycpID09PSAnbG9naWMgYXJjJylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU2ltcGxlTm9kZVRvQXJyYXkoZWxlLCBzb3VyY2UsIGJlc3RPcmllbnRhdGlvbiwgaW5wdXRQb3J0LCBcImlucHV0XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFNpbXBsZU5vZGVUb0FycmF5KGVsZSwgc291cmNlLCBiZXN0T3JpZW50YXRpb24sIG5vdENvbm5lY3RlZFRvUG9ydCwgXCJub3RDb25uZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc291cmNpbmdFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBjeS5nZXRFbGVtZW50QnlJZChlZGdlLmRhdGEoJ3RhcmdldCcpKTtcbiAgICAgICAgICAgICAgaWYoIXRhcmdldC5pc1BhcmVudCgpKXtcbiAgICAgICAgICAgICAgICBpZiAoZWRnZS5kYXRhKCdjbGFzcycpID09PSAnbW9kdWxhdGlvbicgfHwgZWRnZS5kYXRhKCdjbGFzcycpID09PSAnc3RpbXVsYXRpb24nIHx8IGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ2NhdGFseXNpcycgfHwgZWRnZS5kYXRhKCdjbGFzcycpID09PSAnaW5oaWJpdGlvbicgfHwgZWRnZS5kYXRhKCdjbGFzcycpID09PSAnbmVjZXNzYXJ5IHN0aW11bGF0aW9uJyB8fCBlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICdsb2dpYyBhcmMnKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTaW1wbGVOb2RlVG9BcnJheShlbGUsIHRhcmdldCwgYmVzdE9yaWVudGF0aW9uLCBvdXRwdXRQb3J0LCBcIm91dHB1dFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTaW1wbGVOb2RlVG9BcnJheShlbGUsIHRhcmdldCwgYmVzdE9yaWVudGF0aW9uLCBub3RDb25uZWN0ZWRUb1BvcnQsIFwibm90Q29ubmVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy9UaGUgYXJyYXlzIGFyZSBzb3J0ZWQgaW4gb3JkZXIgdG8ga2VlcCB0aGUgaGlnaCBwcmlvcml0eSBvZiBub2RlcyBwb3NpdGlvbmVkIGNvbXBsZXRlbHkgdG8gdGhlIG90aGVyIHNpZGVcbiAgICAgIGlucHV0UG9ydC5zb3J0KGZ1bmN0aW9uKGEsIGIpe3JldHVybiBiLnNjb3JlIC0gYS5zY29yZX0pO1xuICAgICAgb3V0cHV0UG9ydC5zb3J0KGZ1bmN0aW9uKGEsIGIpe3JldHVybiBiLnNjb3JlIC0gYS5zY29yZX0pO1xuICAgICAgbm90Q29ubmVjdGVkVG9Qb3J0LnNvcnQoZnVuY3Rpb24oYSwgYil7cmV0dXJuIGEuc2NvcmUgLSBiLnNjb3JlfSk7XG4gICAgICAvL0ZpcnN0IHdlIGNoZWNrIGZvciBkaXJlY3Qgc3dhcGluZyBiZXR3ZWVuIG5vZGVzIGZyb20gZGlmZmVyZW50IHBvcnRzIHBvc2l0aW9uZWQgdG8gdGhlIHdyb25nIHNpZGVcbiAgICAgIHZhciBtaW5MZW5ndGggPSBpbnB1dFBvcnQubGVuZ3RoO1xuICAgICAgaWYgKG91dHB1dFBvcnQubGVuZ3RoIDwgbWluTGVuZ3RoKVxuICAgICAgICAgIG1pbkxlbmd0aCA9IG91dHB1dFBvcnQubGVuZ3RoO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG1pbkxlbmd0aDsgaSsrKVxuICAgICAge1xuICAgICAgICAgIHZhciBpbnB1dFBvcnRFbGUgPSBpbnB1dFBvcnQucG9wKCk7XG4gICAgICAgICAgdmFyIG91dHB1dFBvcnRFbGUgPSBvdXRwdXRQb3J0LnBvcCgpO1xuICAgICAgICAgIC8vQ2hlY2tzIGlmIGZyZWUgbm9kZXMgYmVsb25nIHRvIHRoZSBzYW1lIGNvbXBvdW5kXG4gICAgICAgICAgdmFyIGZpcnN0Tm9kZSA9IGN5LmdldEVsZW1lbnRCeUlkKGlucHV0UG9ydEVsZS5pZCk7XG4gICAgICAgICAgdmFyIHNlY29uZE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChvdXRwdXRQb3J0RWxlLmlkKTtcbiAgICAgICAgICBpZiAoZmlyc3ROb2RlLmRhdGEoJ3BhcmVudCcpICE9PSBzZWNvbmROb2RlLmRhdGEoJ3BhcmVudCcpKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc3dhcEVsZW1lbnRzKGlucHV0UG9ydEVsZSwgb3V0cHV0UG9ydEVsZSk7XG4gICAgICB9XG4gICAgICAvKlxuICAgICAgIEFmdGVyIHRoYXQgd2UgaXRlcmF0ZSBvdmVyIGVhY2ggZWxlbWVudCBvZiBlZmZlY3RvciBub2RlcyBhbmQgc2VlIHRoZSBzY29yZXMgaXQgcHJvZHVjZXMgYnkgc3dhcGluZ1xuICAgICAgIHdpdGggbm9kZXMgY29ubmVjdGVkIHRvIGlucHV0IG9yIG91dHB1dCBwb3J0c1xuICAgICAgICovXG4gICAgICBmb3IgKGkgPSBub3RDb25uZWN0ZWRUb1BvcnQubGVuZ3RoIC0xOyBpID49IDAgOyBpLS0pXG4gICAgICB7XG4gICAgICAgICAgdmFyIGVmZmVjdG9yID0gbm90Q29ubmVjdGVkVG9Qb3J0W2ldO1xuICAgICAgICAgIGlmIChvdXRwdXRQb3J0Lmxlbmd0aCA+IDApXG4gICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgZmlyc3RPdXRwdXQgPSBvdXRwdXRQb3J0W291dHB1dFBvcnQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgIC8vQ2hlY2tzIGlmIGZyZWUgbm9kZXMgYmVsb25nIHRvIHRoZSBzYW1lIGNvbXBvdW5kXG4gICAgICAgICAgICAgIHZhciBmaXJzdE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChlZmZlY3Rvci5pZCk7XG4gICAgICAgICAgICAgIHZhciBzZWNvbmROb2RlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZmlyc3RPdXRwdXQuaWQpO1xuICAgICAgICAgICAgICBpZiAoZmlyc3ROb2RlLmRhdGEoJ3BhcmVudCcpICE9PSBzZWNvbmROb2RlLmRhdGEoJ3BhcmVudCcpKVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc3dhcEVsZW1lbnRzKGVmZmVjdG9yLCBmaXJzdE91dHB1dCk7XG4gICAgICAgICAgICAgIHZhciBmaXJzdE91dHB1dFNjb3JlID0gLWVsZW1lbnRVdGlsaXRpZXMuY2hlY2tOZWdhdGl2ZU9yaWVudGF0aW9uU2NvcmUoZWxlLCBjeS5nZXRFbGVtZW50QnlJZChmaXJzdE91dHB1dC5pZCksIGJlc3RPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgIGlmICggZmlyc3RPdXRwdXRTY29yZSA+IGZpcnN0T3V0cHV0LnNjb3JlKVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBvdXRwdXRQb3J0LnBvcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc3dhcEVsZW1lbnRzKGVmZmVjdG9yLCBmaXJzdE91dHB1dCk7IC8vc3dhcCBiYWNrXG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKGlucHV0UG9ydC5sZW5ndGggPiAwKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGZpcnN0SW5wdXQgPSBpbnB1dFBvcnRbaW5wdXRQb3J0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAvL0NoZWNrcyBpZiBmcmVlIG5vZGVzIGJlbG9uZyB0byB0aGUgc2FtZSBjb21wb3VuZFxuICAgICAgICAgICAgICB2YXIgZmlyc3ROb2RlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWZmZWN0b3IuaWQpO1xuICAgICAgICAgICAgICB2YXIgc2Vjb25kTm9kZSA9IGN5LmdldEVsZW1lbnRCeUlkKGZpcnN0SW5wdXQuaWQpO1xuICAgICAgICAgICAgICBpZiAoZmlyc3ROb2RlLmRhdGEoJ3BhcmVudCcpICE9PSBzZWNvbmROb2RlLmRhdGEoJ3BhcmVudCcpKVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc3dhcEVsZW1lbnRzKGVmZmVjdG9yLCBmaXJzdElucHV0KTtcbiAgICAgICAgICAgICAgdmFyIGZpcnN0SW5wdXRTY29yZSA9IGVsZW1lbnRVdGlsaXRpZXMuY2hlY2tOZWdhdGl2ZU9yaWVudGF0aW9uU2NvcmUoZWxlLCBjeS5nZXRFbGVtZW50QnlJZChmaXJzdElucHV0LmlkKSwgYmVzdE9yaWVudGF0aW9uKTtcbiAgICAgICAgICAgICAgaWYgKCBmaXJzdElucHV0U2NvcmUgPiBmaXJzdElucHV0LnNjb3JlKVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpbnB1dFBvcnQucG9wKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5zd2FwRWxlbWVudHMoZWZmZWN0b3IsIGZpcnN0SW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfTtcblxuICAvKlxuICAqIEFkZHMgc2ltcGxlIG5vZGVzIHdoZW4gdGhleSBoYXZlIG5lZ2F0aXZlIHNjb3JlIHRvIGlucHV0UG9ydCwgb3V0cHV0UG9ydCBvciBub3RDb25uZWN0ZWRQb3J0IGFycmF5c1xuICAqICovXG4gIGVsZW1lbnRVdGlsaXRpZXMuYWRkU2ltcGxlTm9kZVRvQXJyYXkgPSBmdW5jdGlvbihlbGUsIG90aGVyLCBvcmllbnRhdGlvbiwgYXJyYXksIGNvbm5lY3RlZFRvKSB7XG4gICAgICBpZiAob3RoZXIuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGggPT09IDEpXG4gICAgICB7XG4gICAgICAgICAgdmFyIG5vZGVTY29yZTtcbiAgICAgICAgICB2YXIgb2JqID0ge307XG4gICAgICAgICAgaWYgKGNvbm5lY3RlZFRvID09PSBcIm5vdENvbm5lY3RlZFwiKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbm9kZVNjb3JlID0gTWF0aC5hYnMoZWxlbWVudFV0aWxpdGllcy5jaGVja05lZ2F0aXZlT3JpZW50YXRpb25TY29yZShlbGUsIG90aGVyLCBvcmllbnRhdGlvbikpO1xuICAgICAgICAgICAgICBvYmpbJ2lkJ10gPSBvdGhlci5pZCgpO1xuICAgICAgICAgICAgICBvYmpbJ3Njb3JlJ10gPSBub2RlU2NvcmU7XG4gICAgICAgICAgICAgIGFycmF5LnB1c2gob2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGNvbm5lY3RlZFRvID09PSBcImlucHV0XCIpXG4gICAgICAgICAgICAgICAgICBub2RlU2NvcmUgPSBlbGVtZW50VXRpbGl0aWVzLmNoZWNrTmVnYXRpdmVPcmllbnRhdGlvblNjb3JlKGVsZSwgb3RoZXIsIG9yaWVudGF0aW9uKTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAoY29ubmVjdGVkVG8gPT09IFwib3V0cHV0XCIpXG4gICAgICAgICAgICAgICAgICBub2RlU2NvcmUgPSAtZWxlbWVudFV0aWxpdGllcy5jaGVja05lZ2F0aXZlT3JpZW50YXRpb25TY29yZShlbGUsIG90aGVyLCBvcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgIGlmIChub2RlU2NvcmUgPCAwKSAvL2lmIGl0IGlzIGluIHRoZSB3cm9uZyBzaWRlIHdlIGFkZCBpdCB0byB0aGUgaW5wdXQgYXJyYXlcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb2JqWydpZCddID0gb3RoZXIuaWQoKTtcbiAgICAgICAgICAgICAgICAgIG9ialsnc2NvcmUnXSA9IG5vZGVTY29yZTtcbiAgICAgICAgICAgICAgICAgIGFycmF5LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfTtcblxuICAvKlxuICBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHNjb3JlIG9mIGEgbm9kZSBiYXNlZCBvbiBpdHMgcG9zaXRpb24gd2l0aCByZXNwZWN0IHRvIGEgcHJvY2Vzcy9sb2dpY2FsIG9wZXJhdG9yXG4gIEBwYXJhbSBlbGUgLSBpcyB0aGUgbm9kZSB3aXRoIHRoZSBwb3J0cy4gSXQgY2FuIGJlIHByb2Nlc3Msb21pdHRlZCBwcm9jZXNzLFxuICB1bmNlcnRhaW4gcHJvY2VzcywgYXNzb2NpYXRpb24sIGRpc3NvY2lhdGlvbiwgbG9naWNhbCBvcGVyYXRvclxuICBAcGFyYW0gb3RoZXIgLSBpcyB0aGUgb3RoZXIgbm9kZSwgYW5kIGJhc2VkIG9uIGl0cyBwb3NpdGlvbiBzY29yZSBvZiBhIG5vZGUgaXMgY2FsY3VsYXRlZFxuICBAcGFyYW0gb3JpZW50YXRpb24gLSBBIHN0cmluZyB3aGljaCBob2xkcyBjdXJyZW50IGJlc3Qgb3JpZW50YXRpb25cbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5jaGVja05lZ2F0aXZlT3JpZW50YXRpb25TY29yZSA9IGZ1bmN0aW9uKGVsZSwgb3RoZXIsIG9yaWVudGF0aW9uKSB7XG4gICAgICB2YXIgY29lZmYgPSAwLjU7XG4gICAgICB2YXIgc2NvcmUgPSAxO1xuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnTC10by1SJyB8fCBvcmllbnRhdGlvbiA9PT0gJ1ItdG8tTCcpXG4gICAgICB7XG4gICAgICAgICAgdmFyIG5vZGVXaWR0aCA9IGVsZS53aWR0aCgpLzI7XG4gICAgICAgICAgaWYgKG90aGVyLnBvc2l0aW9uKCd4JykgPCBlbGUucG9zaXRpb24oJ3gnKSAtIG5vZGVXaWR0aClcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0wtdG8tUicpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcmU7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAnUi10by1MJylcbiAgICAgICAgICAgICAgICAgIHJldHVybiAtc2NvcmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKG90aGVyLnBvc2l0aW9uKCd4JykgPj0gZWxlLnBvc2l0aW9uKCd4JykgLSBub2RlV2lkdGggJiYgb3RoZXIucG9zaXRpb24oJ3gnKSA8PSBlbGUucG9zaXRpb24oJ3gnKSArIG5vZGVXaWR0aClcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0wtdG8tUicpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKGVsZS5wb3NpdGlvbigneCcpIC0gb3RoZXIucG9zaXRpb24oJ3gnKSkvbm9kZVdpZHRoKmNvZWZmO1xuICAgICAgICAgICAgICBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ1ItdG8tTCcpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gLShlbGUucG9zaXRpb24oJ3gnKSAtIG90aGVyLnBvc2l0aW9uKCd4JykpL25vZGVXaWR0aCpjb2VmZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAob3RoZXIucG9zaXRpb24oJ3gnKSA+IGVsZS5wb3NpdGlvbigneCcpICsgbm9kZVdpZHRoKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnTC10by1SJylcbiAgICAgICAgICAgICAgICAgIHJldHVybiAtc2NvcmU7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAnUi10by1MJylcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzY29yZTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob3JpZW50YXRpb24gPT09ICdULXRvLUInIHx8IG9yaWVudGF0aW9uID09PSAnQi10by1UJylcbiAgICAgIHtcbiAgICAgICAgICB2YXIgbm9kZUhlaWdodCA9IGVsZS5oZWlnaHQoKS8yO1xuICAgICAgICAgIGlmIChvdGhlci5wb3NpdGlvbigneScpIDwgZWxlLnBvc2l0aW9uKCd5JykgLSBub2RlSGVpZ2h0KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnVC10by1CJylcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzY29yZTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAob3JpZW50YXRpb24gPT09ICdCLXRvLVQnKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIC1zY29yZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAob3RoZXIucG9zaXRpb24oJ3knKSA+PSBlbGUucG9zaXRpb24oJ3knKSAtIG5vZGVIZWlnaHQgJiYgb3RoZXIucG9zaXRpb24oJ3knKSA8PSBlbGUucG9zaXRpb24oJ3knKSArIG5vZGVIZWlnaHQpXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdULXRvLUInKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGUucG9zaXRpb24oJ3knKSAtIG90aGVyLnBvc2l0aW9uKCd5JykpL25vZGVIZWlnaHQqY29lZmY7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAnQi10by1UJylcbiAgICAgICAgICAgICAgICAgIHJldHVybiAtKGVsZS5wb3NpdGlvbigneScpIC0gb3RoZXIucG9zaXRpb24oJ3knKSkvbm9kZUhlaWdodCpjb2VmZjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAob3RoZXIucG9zaXRpb24oJ3knKSA+IGVsZS5wb3NpdGlvbigneScpICsgbm9kZUhlaWdodClcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ1QtdG8tQicpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gLXNjb3JlO1xuICAgICAgICAgICAgICBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ0ItdG8tVCcpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcmU7XG4gICAgICAgICAgfVxuICAgICAgfVxuICB9O1xuXG4gIC8qXG4gIFN3YXBzIHRoZSBwb3NpdGlvbnMgb2YgMiBlbGVtZW50c1xuICAqL1xuICBlbGVtZW50VXRpbGl0aWVzLnN3YXBFbGVtZW50cyA9IGZ1bmN0aW9uKGZpcnN0RWxlLCBzZWNvbmRFbGUpIHtcbiAgICAgIHZhciBmaXJzdE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChmaXJzdEVsZS5pZCk7XG4gICAgICB2YXIgc2Vjb25kTm9kZSA9IGN5LmdldEVsZW1lbnRCeUlkKHNlY29uZEVsZS5pZCk7XG4gICAgICB2YXIgdGVtcHggPSBmaXJzdE5vZGUucG9zaXRpb24oJ3gnKTtcbiAgICAgIHZhciB0ZW1weSA9IGZpcnN0Tm9kZS5wb3NpdGlvbigneScpO1xuICAgICAgZmlyc3ROb2RlLnBvc2l0aW9uKCd4Jywgc2Vjb25kTm9kZS5wb3NpdGlvbigneCcpKTtcbiAgICAgIGZpcnN0Tm9kZS5wb3NpdGlvbigneScsIHNlY29uZE5vZGUucG9zaXRpb24oJ3knKSk7XG4gICAgICBzZWNvbmROb2RlLnBvc2l0aW9uKCd4JywgdGVtcHgpO1xuICAgICAgc2Vjb25kTm9kZS5wb3NpdGlvbigneScsIHRlbXB5KTtcbiAgfTtcblxuICAvLyB1c2VkIGZvciBoYW5kbGluZyB0aGUgdmFyaWFibGUgcHJvcGVydHkgb2YgY29tcGxleGVzXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q29tcGxleFBhZGRpbmcgPSBmdW5jdGlvbihlbGUpIHtcbiAgICAvLyB0aGlzIHByb3BlcnR5IG5lZWRzIHRvIHRha2UgaW50byBhY2NvdW50OlxuICAgIC8vIC0gcHJlc2VuY2Ugb2YgYSBsYWJlbFxuICAgIC8vIC0gb3B0aW9uIHRvIGRpc3BsYXkgY29tcGxleCBsYWJlbHNcbiAgICAvLyAtIHByZXNlbmNlIG9mIHN0YXRlcyBhbmQgaW5mbyBib3ggb24gdGhlIGJvdHRvbVxuICAgIHZhciBwYWRkaW5nID0gZ3JhcGhVdGlsaXRpZXMuZ2V0Q29tcG91bmRQYWRkaW5ncygpO1xuICAgIHBhZGRpbmcgPSBwYWRkaW5nIDwgNSA/IDUgOiBwYWRkaW5nO1xuICAgIGlmIChvcHRpb25zLnNob3dDb21wbGV4TmFtZSAmJiBlbGVtZW50VXRpbGl0aWVzLmdldEVsZW1lbnRDb250ZW50KGVsZSkpIHtcbiAgICAgIHBhZGRpbmcgKz0gb3B0aW9ucy5leHRyYUNvbXBsZXhQYWRkaW5nICogMC41O1xuICAgICAgLy8gaWYgdGhlcmUgaXMgc29tZXRoaW5nIG9uIHRoZSBib3R0b20gc2lkZVxuXG4gICAgICBpZiAoZWxlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykgJiYgZWxlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykuYm90dG9tICYmIGVsZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpLmJvdHRvbS51bml0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhZGRpbmcgKz0gb3B0aW9ucy5leHRyYUNvbXBsZXhQYWRkaW5nICogMC41O1xuICAgICAgfWVsc2V7ICBcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBmb3IodmFyIGk9MDsgaSA8IGVsZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmxlbmd0aDsgaSsrKSB7ICAgICAgICAgIFxuICAgICAgICAgIHZhciBzdGF0ZXNhbmRpbmZvcyA9IGVsZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpW2ldOyBcbiAgICAgICAgICBcbiAgICAgICAgICB2YXIgdGhpc1kgPSBzdGF0ZXNhbmRpbmZvcy5iYm94Lnk7XG4gICAgICAgICAgdmFyIHRoaXNIID0gc3RhdGVzYW5kaW5mb3MuYmJveC5oO1xuICAgICAgICAgIHZhciBwYXJlbnRZID0gKGVsZS5kYXRhKCdjbGFzcycpID09IFwiY29tcGFydG1lbnRcIiB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PSBcImNvbXBsZXhcIikgPyBlbGUuZGF0YSgnYmJveCcpLnkgOiBlbGUucG9zaXRpb24oKS55O1xuICAgICAgICAgIHZhciBoZWlnaHQgPSBlbGUuZGF0YShcIm9yaWdpbmFsSFwiKSA/IGVsZS5kYXRhKFwib3JpZ2luYWxIXCIpIDogZWxlLmhlaWdodCgpO1xuICAgICAgICAgIHZhciBwYXJlbnRZMiA9IE51bWJlcigocGFyZW50WSArIGhlaWdodC8gMikudG9GaXhlZCgyKSk7XG4gICAgICAgICAgdmFyIGNlbnRlclkgPSBOdW1iZXIoKHRoaXNZK3RoaXNILzIpLnRvRml4ZWQoMikpO1xuICAgICAgICAgIGlmKGNlbnRlclkgPT0gcGFyZW50WTIpe1xuICAgICAgICAgICAgcGFkZGluZyArPSBvcHRpb25zLmV4dHJhQ29tcGxleFBhZGRpbmcgKiAwLjU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgICAvLyBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIHBhZGRpbmcgaXMgdGhlIHRpZ2h0ZXN0LCB3ZSBuZWVkIGEgYml0IG9mIGV4dHJhIHNwYWNlXG4gICAgLy8gdG8gYXZvaWQgdG91Y2hpbmcgdGhlIGluZm9ib3hlcyBvZiB0aGUgY29tcGxleFxuICAgIGVsc2Uge1xuICAgICAgaWYgKGVsZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcGFkZGluZyArPSAyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFkZGluZztcbiAgfTtcblxuICAvLyB1c2VkIGZvciBoYW5kbGluZyB0aGUgdmFyaWFibGUgcHJvcGVydHkgb2YgY29tcGxleGVzXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q29tcGxleE1hcmdpbiA9IGZ1bmN0aW9uKGVsZSkge1xuICAgIC8vIHRoaXMgcHJvcGVydHkgbmVlZHMgdG8gdGFrZSBpbnRvIGFjY291bnQ6XG4gICAgLy8gLSBwcmVzZW5jZSBvZiBhIGxhYmVsXG4gICAgLy8gLSBvcHRpb24gdG8gZGlzcGxheSBjb21wbGV4IGxhYmVsc1xuICAgIC8vIC0gcHJlc2VuY2Ugb2Ygc3RhdGVzIGFuZCBpbmZvIGJveCBvbiB0aGUgYm90dG9tXG4gICAgdmFyIG1hcmdpbiA9ICAtMSAqIG9wdGlvbnMuZXh0cmFDb21wbGV4UGFkZGluZztcblxuICAgIGlmIChvcHRpb25zLnNob3dDb21wbGV4TmFtZSAmJlxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmdldEVsZW1lbnRDb250ZW50KGVsZSkgJiZcbiAgICAgICAgZWxlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykgJiYgLy8gY2hlY2sgaWYgdGhlcmUgaXMgc29tZXRoaW5nIG9uIHRoZSBib3R0b20gc2lkZVxuICAgICAgICBlbGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKS5ib3R0b20gJiZcbiAgICAgICAgZWxlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykuYm90dG9tLnVuaXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIG1hcmdpbiAtPSBvcHRpb25zLmV4dHJhQ29tcGxleFBhZGRpbmcgKiAwLjU7XG4gICAgfVxuXG4gICAgaWYgKGVsZS5jc3MoXCJmb250LXNpemVcIikgPT0gXCIxNHB4XCIpXG4gICAgICBtYXJnaW4gLT0gMjtcblxuICAgIHJldHVybiBtYXJnaW47XG4gIH07XG5cblxuICAvLyBTZXQgY2xvbmUgbWFya2VyIHN0YXR1cyBvZiBnaXZlbiBub2RlcyB0byB0aGUgZ2l2ZW4gc3RhdHVzLlxuICBlbGVtZW50VXRpbGl0aWVzLnNldENsb25lTWFya2VyU3RhdHVzID0gZnVuY3Rpb24gKG5vZGUsIHN0YXR1cykge1xuICAgIGlmIChzdGF0dXMpXG4gICAgICAgIG5vZGUuZGF0YSgnY2xvbmVtYXJrZXInLCB0cnVlKTtcbiAgICBlbHNlXG4gICAgICAgIG5vZGUucmVtb3ZlRGF0YSgnY2xvbmVtYXJrZXInKTtcblxuICAgIGlmKG5vZGUuZGF0YSgnY2xhc3MnKSAhPT0gXCJ1bnNwZWNpZmllZCBlbnRpdHlcIiAmJiBub2RlLmRhdGEoJ2NsYXNzJykgIT09IFwicGVydHVyYmluZyBhZ2VudFwiKVxuICAgICAgICByZXR1cm47XG5cbiAgICB2YXIgYmdPYmogPSB7XG4gICAgICAgICdiYWNrZ3JvdW5kLWltYWdlJzogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTAwJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTAwJTIwMTAwJTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBbm9uZSUzQnN0cm9rZSUzQWJsYWNrJTNCc3Ryb2tlLXdpZHRoJTNBMCUzQiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQS8vd3d3LnczLm9yZy8yMDAwL3N2ZyUyMiUyMCUzRSUzQ3JlY3QlMjB4JTNEJTIyMCUyMiUyMHklM0QlMjIwJTIyJTIwd2lkdGglM0QlMjIxMDAlMjIlMjBoZWlnaHQlM0QlMjIxMDAlMjIlMjBzdHlsZSUzRCUyMmZpbGwlM0ElMjM4MzgzODMlMjIvJTNFJTIwJTNDL3N2ZyUzRScsXG4gICAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOiAnNTAlJyxcbiAgICAgICAgJ2JhY2tncm91bmQtcG9zaXRpb24teSc6ICcxMDAlJyxcbiAgICAgICAgJ2JhY2tncm91bmQtd2lkdGgnOiAnMTAwJScsXG4gICAgICAgICdiYWNrZ3JvdW5kLWhlaWdodCc6ICcyNSUnLFxuICAgICAgICAnYmFja2dyb3VuZC1maXQnOiAnbm9uZScsXG4gICAgICAgICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknOiAnMCdcbiAgICB9O1xuXG4gICAgdmFyIGltZ3MgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgIHZhciB4UG9zID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgdmFyIHlQb3MgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teScpID8gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICB2YXIgd2lkdGhzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICB2YXIgaGVpZ2h0cyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICB2YXIgZml0cyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1maXQnKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1maXQnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICB2YXIgb3BhY2l0aWVzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknKSA/IChcIlwiICsgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknKSkuc3BsaXQoXCIgXCIpIDogW107XG5cbiAgICBpZihzdGF0dXMpe1xuICAgICAgICB2YXIgaW5kZXggPSBpbWdzLmluZGV4T2YoYmdPYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSk7XG4gICAgICAgIC8vIEFscmVhZHkgZXhpc3RzOyBNYWtlIG9wYWNpdHkgbm9uLXplcm9cbiAgICAgICAgaWYoIGluZGV4ID4gLTEpXG4gICAgICAgICAgICBvcGFjaXRpZXNbaW5kZXhdID0gbm9kZS5jc3MoJ2JhY2tncm91bmQtb3BhY2l0eScpO1xuICAgICAgICBlbHNle1xuICAgICAgICAgICAgaW1ncy5wdXNoKGJnT2JqWydiYWNrZ3JvdW5kLWltYWdlJ10pO1xuICAgICAgICAgICAgeFBvcy5wdXNoKGJnT2JqWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnXSk7XG4gICAgICAgICAgICB5UG9zLnB1c2goYmdPYmpbJ2JhY2tncm91bmQtcG9zaXRpb24teSddKTtcbiAgICAgICAgICAgIHdpZHRocy5wdXNoKGJnT2JqWydiYWNrZ3JvdW5kLXdpZHRoJ10pO1xuICAgICAgICAgICAgaGVpZ2h0cy5wdXNoKGJnT2JqWydiYWNrZ3JvdW5kLWhlaWdodCddKTtcbiAgICAgICAgICAgIGZpdHMucHVzaChiZ09ialsnYmFja2dyb3VuZC1maXQnXSk7XG4gICAgICAgICAgICBvcGFjaXRpZXMucHVzaChub2RlLmNzcygnYmFja2dyb3VuZC1vcGFjaXR5JykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICAgIHZhciBpbmRleCA9IGltZ3MuaW5kZXhPZihiZ09ialsnYmFja2dyb3VuZC1pbWFnZSddKTtcbiAgICAgICAgLy8gQWxyZWFkeSBleGlzdHM7IE1ha2Ugb3BhY2l0eSB6ZXJvXG4gICAgICAgIGlmKCBpbmRleCA+IC0xKVxuICAgICAgICAgICAgb3BhY2l0aWVzW2luZGV4XSA9ICcwJztcbiAgICB9XG5cbiAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnLCBpbWdzLmpvaW4oXCIgXCIpKTtcbiAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teCcsIHhQb3Muam9pbihcIiBcIikpO1xuICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgeVBvcy5qb2luKFwiIFwiKSk7XG4gICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJywgd2lkdGhzLmpvaW4oXCIgXCIpKTtcbiAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0JywgaGVpZ2h0cy5qb2luKFwiIFwiKSk7XG4gICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWZpdCcsIGZpdHMuam9pbihcIiBcIikpO1xuICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5Jywgb3BhY2l0aWVzLmpvaW4oXCIgXCIpKTtcbiAgfTtcblxuICAvLyBTZWN0aW9uIEVuZFxuICAvLyBTdHlsZXNoZWV0IGhlbHBlcnNcblxuICB2YXIgZGVmYXVsdFByb3BlcnRpZXMgPSB7XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHROb2RlUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnYm9yZGVyLXdpZHRoJzogMS4yNSxcbiAgICAgICdib3JkZXItY29sb3InOiAnIzU1NTU1NScsXG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjZmZmZmZmJyxcbiAgICAgICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAxLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSc6IDEsXG4gICAgICAndGV4dC13cmFwJzogJ3dyYXAnXG4gICAgfTtcbiAgfTtcblxuICB2YXIgZ2V0RGVmYXVsdEVkZ2VQcm9wZXJ0aWVzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdsaW5lLWNvbG9yJzogJyM1NTU1NTUnLFxuICAgICAgJ3dpZHRoJzogMS4yNVxuICAgIH07XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHRQcm9jZXNzU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogMjAsXG4gICAgICBoZWlnaHQ6IDIwXG4gICAgfTtcbiAgfTtcblxuICB2YXIgZ2V0RGVmYXVsdExvZ2ljYWxPcGVyYXRvclNpemUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IDMwLFxuICAgICAgaGVpZ2h0OiAzMFxuICAgIH07XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHRCQVNpemUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IDYwLFxuICAgICAgaGVpZ2h0OiAzMFxuICAgIH07XG4gIH07XG5cbiAgdmFyIGRlZmF1bHRTaWZFZGdlQ29sb3JNYXAgPSB7XG4gICAgJ25laWdoYm9yLW9mJzogJyNGQzAwMkMnLFxuICAgICdpbnRlcmFjdHMtd2l0aCc6ICcjQjU3MjYxJyxcbiAgICAnaW4tY29tcGxleC13aXRoJzogJyNCNDk4N0EnLFxuICAgICdjb250cm9scy1zdGF0ZS1jaGFuZ2Utb2YnOiAnI0I0RTFDRCcsXG4gICAgJ2NvbnRyb2xzLXRyYW5zcG9ydC1vZic6ICcjRjBFN0M4JyxcbiAgICAnY29udHJvbHMtcGhvc3Bob3J5bGF0aW9uLW9mJzogJyNEOTcwQTEnLFxuICAgICdjYXRhbHlzaXMtcHJlY2VkZXMnOiAnIzhFQzNFRCcsXG4gICAgJ2NvbnRyb2xzLWV4cHJlc3Npb24tb2YnOiAnIzZBMEYzMCcsXG4gICAgJ2NvbnN1bXB0aW9uLWNvbnRyb2xlZC1ieSc6ICcjQTlBOUY3JyxcbiAgICAnY29udHJvbHMtcHJvZHVjdGlvbi1vZic6ICcjMkQ1MjA3JyxcbiAgICAnY29udHJvbHMtdHJhbnNwb3J0LW9mLWNoZW1pY2FsJzogJyMzRjAwRkYnLFxuICAgICdjaGVtaWNhbC1hZmZlY3RzJzogJyNEOTVGMjMnLFxuICAgICdyZWFjdHMtd2l0aCc6ICcjNEUyMTRCJyxcbiAgICAndXNlZC10by1wcm9kdWNlJzogJyNGRjJGMDcnLFxuICAgICdwaG9zcGhvcnlsYXRlcyc6ICcjNDNBOTNDJyxcbiAgICAnZGVwaG9zcGhvcnlsYXRlcyc6ICcjQ0Q0RjMyJyxcbiAgICAndXByZWd1bGF0ZXMtZXhwcmVzc2lvbic6ICcjNDNBOTNDJyxcbiAgICAnZG93bnJlZ3VsYXRlcy1leHByZXNzaW9uJzogJyNDRDRGMzInLFxuICAgICdhY3RpdmF0ZXMnOiAnIzMyRDg0OScsXG4gICAgJ2luaGliaXRzJzogJyM0ODg2QTUnLFxuICAgICdhY3RpdmF0ZXMtZ3RwYXNlJzogJyM0NjhERTMnLFxuICAgICdpbmhpYml0cy1ndHBhc2UnOiAnI0MzNjRCRicsXG4gICAgJ2FjZXR5bGF0ZXMnOiAnIzU1QjFCNicsXG4gICAgJ2RlYWNldHlsYXRlcyc6ICcjRUU1Rjc4JyxcbiAgICAnbWV0aHlsYXRlcyc6ICcjQjBCMDNEJyxcbiAgICAnZGVtZXRoeWxhdGVzJzogJyNEQjZGMjEnXG4gIH07XG5cbiAgdmFyIGRlZmF1bHRTaXplTWFwID0ge1xuICAgICdtYWNyb21vbGVjdWxlJzoge1xuICAgICAgd2lkdGg6IDYwLFxuICAgICAgaGVpZ2h0OiAzMFxuICAgIH0sXG4gICAgJ251Y2xlaWMgYWNpZCBmZWF0dXJlJzoge1xuICAgICAgd2lkdGg6IDYwLFxuICAgICAgaGVpZ2h0OiAzMFxuICAgIH0sXG4gICAgJ3NpbXBsZSBjaGVtaWNhbCc6IHtcbiAgICAgIHdpZHRoOiAzMCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9LFxuICAgICdzb3VyY2UgYW5kIHNpbmsnOiB7XG4gICAgICB3aWR0aDogMjIsXG4gICAgICBoZWlnaHQ6IDIyXG4gICAgfSxcbiAgICAncGhlbm90eXBlJzoge1xuICAgICAgd2lkdGg6IDYwLFxuICAgICAgaGVpZ2h0OiAzMFxuICAgIH0sXG4gICAgJ3Vuc3BlY2lmaWVkIGVudGl0eSc6IHtcbiAgICAgIHdpZHRoOiA2MCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9LFxuICAgICdwZXJ0dXJiaW5nIGFnZW50Jzoge1xuICAgICAgd2lkdGg6IDYwLFxuICAgICAgaGVpZ2h0OiAzMFxuICAgIH0sXG4gICAgJ2NvbXBsZXgnOiB7XG4gICAgICB3aWR0aDogNDQsXG4gICAgICBoZWlnaHQ6IDQ0XG4gICAgfSxcbiAgICAnY29tcGFydG1lbnQnOiB7XG4gICAgICB3aWR0aDogODAsXG4gICAgICBoZWlnaHQ6IDgwXG4gICAgfSxcbiAgICAnc3VibWFwJzoge1xuICAgICAgd2lkdGg6IDgwLFxuICAgICAgaGVpZ2h0OiA4MFxuICAgIH0sXG4gICAgJ3RhZyc6IHtcbiAgICAgIHdpZHRoOiAzNSxcbiAgICAgIGhlaWdodDogMzVcbiAgICB9LFxuICAgICdTSUYgbWFjcm9tb2xlY3VsZSc6IHtcbiAgICAgIHdpZHRoOiA2MCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9LFxuICAgICdTSUYgc2ltcGxlIGNoZW1pY2FsJzoge1xuICAgICAgd2lkdGg6IDMwLFxuICAgICAgaGVpZ2h0OiAzMFxuICAgIH0sXG4gICAgJ3RvcG9sb2d5IGdyb3VwJzoge1xuICAgICAgd2lkdGg6IDQ0LFxuICAgICAgaGVpZ2h0OiA0NFxuICAgIH1cbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLnByb2Nlc3NUeXBlcy5mb3JFYWNoKCBmdW5jdGlvbiggdHlwZSApIHtcbiAgICAvLyBwaGVub3R5cGUgaGFzIGEgZGlmZmVyZW50IGRlZmF1bHQgc2l6ZVxuICAgIGlmICggdHlwZSA9PSAncGhlbm90eXBlJyApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkZWZhdWx0U2l6ZU1hcFsgdHlwZSBdID0gZ2V0RGVmYXVsdFByb2Nlc3NTaXplKCk7XG4gIH0gKTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmxvZ2ljYWxPcGVyYXRvclR5cGVzLmZvckVhY2goIGZ1bmN0aW9uKCB0eXBlICkge1xuICAgIGRlZmF1bHRTaXplTWFwWyB0eXBlIF0gPSBnZXREZWZhdWx0TG9naWNhbE9wZXJhdG9yU2l6ZSgpO1xuICB9ICk7XG5cbiAgZWxlbWVudFV0aWxpdGllcy5iaW9sb2dpY2FsQWN0aXZpdHlUeXBlcy5mb3JFYWNoKCBmdW5jdGlvbiggdHlwZSApIHtcbiAgICBkZWZhdWx0U2l6ZU1hcFsgdHlwZSBdID0gZ2V0RGVmYXVsdEJBU2l6ZSgpO1xuICB9ICk7XG5cbiAgdmFyIGdldERlZmF1bHRTaXplID0gZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRTaXplTWFwWyB0eXBlIF07XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHRGb250UHJvcGVydGllcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnZm9udC1zaXplJzogMTEsXG4gICAgICAnZm9udC1mYW1pbHknOiAnSGVsdmV0aWNhJyxcbiAgICAgICdmb250LXN0eWxlJzogJ25vcm1hbCcsXG4gICAgICAnZm9udC13ZWlnaHQnOiAnbm9ybWFsJyxcbiAgICAgICdjb2xvcic6ICcjMDAwJ1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHRJbmZvYm94UHJvcGVydGllcyA9IGZ1bmN0aW9uKCBub2RlQ2xhc3MsIGluZm9ib3hUeXBlICkge1xuICAgIHJldHVybiB7XG4gICAgICAnZm9udC1zaXplJzogZ2V0RGVmYXVsdEluZm9ib3hGb250U2l6ZSggbm9kZUNsYXNzLCBpbmZvYm94VHlwZSApLFxuICAgICAgJ2ZvbnQtZmFtaWx5JzogJ0FyaWFsJyxcbiAgICAgICdmb250LXN0eWxlJzogJ25vcm1hbCcsXG4gICAgICAnZm9udC13ZWlnaHQnOiAnbm9ybWFsJyxcbiAgICAgICdmb250LWNvbG9yJzogJyMwZjBmMGYnLFxuICAgICAgJ2JvcmRlci13aWR0aCc6IDEsXG4gICAgICAnYm9yZGVyLWNvbG9yJzogJyM1NTU1NTUnLFxuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnI2ZmZmZmZicsXG4gICAgICAnc2hhcGUtbmFtZSc6IGdldERlZmF1bHRJbmZvYm94U2hhcGVOYW1lKCBub2RlQ2xhc3MsIGluZm9ib3hUeXBlICksXG4gICAgICAnd2lkdGgnOiBnZXREZWZhdWx0SW5mb2JveFNpemUoIG5vZGVDbGFzcywgaW5mb2JveFR5cGUgKS53LFxuICAgICAgJ2hlaWdodCc6IGdldERlZmF1bHRJbmZvYm94U2l6ZSggbm9kZUNsYXNzLCBpbmZvYm94VHlwZSApLmhcbiAgICB9O1xuICB9O1xuXG4gIHZhciBnZXREZWZhdWx0SW5mb2JveEZvbnRTaXplID0gZnVuY3Rpb24oIG5vZGVDbGFzcywgaW5mb2JveFR5cGUgKSB7XG4gICAgdmFyIGZvbnRzaXplID0gOTtcblxuICAgIGlmICggbm9kZUNsYXNzID09PSAnU0lGIG1hY3JvbW9sZWN1bGUnIHx8IG5vZGVDbGFzcyA9PT0gJ1NJRiBzaW1wbGUgY2hlbWljYWwnICkge1xuICAgICAgZm9udHNpemUgPSAxMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9udHNpemU7XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHRJbmZvYm94U2l6ZSA9IGZ1bmN0aW9uKCBub2RlQ2xhc3MsIGluZm9ib3hUeXBlICkge1xuICAgIHZhciB3ID0gMTIsIGggPSAxMjtcblxuICAgIGlmICggbm9kZUNsYXNzID09PSAnU0lGIG1hY3JvbW9sZWN1bGUnIHx8IG5vZGVDbGFzcyA9PT0gJ1NJRiBzaW1wbGUgY2hlbWljYWwnICkge1xuICAgICAgdyA9IDE1O1xuICAgICAgaCA9IDE1O1xuICAgIH1cblxuICAgIHJldHVybiB7IHcsIGggfTtcbiAgfTtcblxuICB2YXIgZ2V0RGVmYXVsdEluZm9ib3hTaGFwZU5hbWUgPSBmdW5jdGlvbiggbm9kZUNsYXNzLCBpbmZvYm94VHlwZSApIHtcbiAgICBpZiAoIGluZm9ib3hUeXBlID09PSAnc3RhdGUgdmFyaWFibGUnICkge1xuICAgICAgcmV0dXJuICdzdGFkaXVtJztcbiAgICB9XG5cbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZOb2RlKCBub2RlQ2xhc3MgKSApIHtcbiAgICAgIGlmICggaW5mb2JveFR5cGUgPT09ICd1bml0IG9mIGluZm9ybWF0aW9uJyApIHtcbiAgICAgICAgaWYgKCBub2RlQ2xhc3MgPT0gJ1NJRiBtYWNyb21vbGVjdWxlJyApIHtcbiAgICAgICAgICByZXR1cm4gJ3N0YWRpdW0nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAncmVjdGFuZ2xlJztcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbGlzdCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0VW5pdE9mSW5mb1NoYXBlT3B0aW9ucyggbm9kZUNsYXNzICk7XG4gICAgICByZXR1cm4gbGlzdFsgMCBdO1xuICAgIH1cbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLm5vZGVUeXBlcy5mb3JFYWNoKCBmdW5jdGlvbiggdHlwZSApIHtcbiAgICBkZWZhdWx0UHJvcGVydGllc1sgdHlwZSBdID0gJC5leHRlbmQoIHt9LCBnZXREZWZhdWx0Tm9kZVByb3BlcnRpZXMoKSwgZ2V0RGVmYXVsdFNpemUoIHR5cGUgKSApO1xuICAgIGlmIChlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVTdGF0ZVZhcmlhYmxlKCB0eXBlICkpIHtcbiAgICAgIHZhciBwcm9wcyA9IGdldERlZmF1bHRJbmZvYm94UHJvcGVydGllcyggdHlwZSwgJ3N0YXRlIHZhcmlhYmxlJyApO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNbIHR5cGUgXVsgJ3N0YXRlIHZhcmlhYmxlJyBdID0gcHJvcHM7XG4gICAgfVxuICAgIGlmIChlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVVbml0T2ZJbmZvcm1hdGlvbiggdHlwZSApKSB7XG4gICAgICB2YXIgcHJvcHMgPSBnZXREZWZhdWx0SW5mb2JveFByb3BlcnRpZXMoIHR5cGUsICd1bml0IG9mIGluZm9ybWF0aW9uJyApO1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNbIHR5cGUgXVsgJ3VuaXQgb2YgaW5mb3JtYXRpb24nIF0gPSBwcm9wcztcbiAgICB9XG4gIH0gKTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmNvbXBvdW5kTm9kZVR5cGVzLmZvckVhY2goIGZ1bmN0aW9uKCB0eXBlICkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzWyB0eXBlIF0gPSAkLmV4dGVuZCggZGVmYXVsdFByb3BlcnRpZXNbIHR5cGUgXSwge1xuICAgICAgJ2JhY2tncm91bmQtb3BhY2l0eSc6IDAuNVxuICAgIH0gKTtcbiAgfSApO1xuXG4gICQuZXh0ZW5kKCBkZWZhdWx0UHJvcGVydGllc1snYXNzb2NpYXRpb24nXSwge1xuICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyM3MDcwNzAnXG4gIH0gKTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmVwblR5cGVzXG4gICAgLmNvbmNhdCggZWxlbWVudFV0aWxpdGllcy5zaWZUeXBlcyApXG4gICAgLmNvbmNhdCggZWxlbWVudFV0aWxpdGllcy5vdGhlck5vZGVUeXBlcyApXG4gICAgLmNvbmNhdCAoZWxlbWVudFV0aWxpdGllcy5iaW9sb2dpY2FsQWN0aXZpdHlUeXBlcylcbiAgICAuY29uY2F0KCBbJ3BoZW5vdHlwZSddIClcbiAgICAuZm9yRWFjaCggZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgICAgJC5leHRlbmQoIGRlZmF1bHRQcm9wZXJ0aWVzWyB0eXBlIF0sIGdldERlZmF1bHRGb250UHJvcGVydGllcygpICk7XG4gICAgfSApO1xuXG4gICQuZXh0ZW5kKCBkZWZhdWx0UHJvcGVydGllc1snc3VibWFwJ10sIHtcbiAgICAnZm9udC1zaXplJzogMTQsXG4gICAgJ2JvcmRlci13aWR0aCc6IDIuMjVcbiAgfSApO1xuXG4gICQuZXh0ZW5kKCBkZWZhdWx0UHJvcGVydGllc1snY29tcGFydG1lbnQnXSwge1xuICAgICdmb250LXNpemUnOiAxNCxcbiAgICAnYm9yZGVyLXdpZHRoJzogMy4yNVxuICB9ICk7XG5cbiAgZWxlbWVudFV0aWxpdGllcy5lZGdlVHlwZXMuZm9yRWFjaCggZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXNbIHR5cGUgXSA9IGdldERlZmF1bHRFZGdlUHJvcGVydGllcygpO1xuXG4gICAgaWYgKCBkZWZhdWx0U2lmRWRnZUNvbG9yTWFwWyB0eXBlIF0gKSB7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc1sgdHlwZSBdWyAnbGluZS1jb2xvcicgXSA9IGRlZmF1bHRTaWZFZGdlQ29sb3JNYXBbIHR5cGUgXTtcbiAgICB9XG4gIH0gKTtcblxuICBmdW5jdGlvbiBnZXRQcm9wKCBwcm9wcywgbmFtZSApIHtcbiAgICB2YXIgcHJvcCA9IHByb3BzWyBuYW1lIF07XG5cbiAgICBpZiAoIHR5cGVvZiBwcm9wICE9PSBudWxsICYmIHR5cGVvZiBwcm9wID09PSAnb2JqZWN0JyApIHtcbiAgICAgIHJldHVybiAkLmV4dGVuZCgge30sIHByb3AgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dGVuZERhdGFXaXRoQ2xhc3NEZWZhdWx0cyggZGF0YSwgY2xhc3NOYW1lLCBwcm9wc1RvU2tpcCApIHtcbiAgICBpZiAoICFjbGFzc05hbWUgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIGNsYXNzTmFtZSApO1xuXG4gICAgT2JqZWN0LmtleXMoIGRlZmF1bHRQcm9wcyApLmZvckVhY2goIGZ1bmN0aW9uKCBuYW1lICkge1xuICAgICAgaWYgKCAhcHJvcHNUb1NraXAgfHwgIXByb3BzVG9Ta2lwWyBuYW1lIF0gKSB7XG4gICAgICAgIGRhdGFbIG5hbWUgXSA9IGdldFByb3AoIGRlZmF1bHRQcm9wcywgbmFtZSApO1xuICAgICAgfVxuICAgIH0gKTtcbiAgfVxuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kTm9kZURhdGFXaXRoQ2xhc3NEZWZhdWx0cyA9IGZ1bmN0aW9uKCBkYXRhLCBjbGFzc05hbWUgKSB7XG4gICAgLy8gbGlzdCBvZiBwcm9wZXJ0aWVzIHRvIHNraXBcbiAgICB2YXIgcHJvcHNUb1NraXAgPSB7XG4gICAgICAnd2lkdGgnOiB0cnVlLFxuICAgICAgJ2hlaWdodCc6IHRydWUsXG4gICAgICAnc3RhdGUgdmFyaWFibGUnOiB0cnVlLFxuICAgICAgJ3VuaXQgb2YgaW5mb3JtYXRpb24nOiB0cnVlLFxuICAgICAgJ211bHRpbWVyJzogdHJ1ZSxcbiAgICAgICdjbG9uZW1hcmtlcic6IHRydWUsXG4gICAgICAncG9ydHMtb3JkZXJpbmcnOiB0cnVlXG4gICAgfTtcblxuICAgIGV4dGVuZERhdGFXaXRoQ2xhc3NEZWZhdWx0cyggZGF0YSwgY2xhc3NOYW1lLCBwcm9wc1RvU2tpcCApO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kRWRnZURhdGFXaXRoQ2xhc3NEZWZhdWx0cyA9IGZ1bmN0aW9uKCBkYXRhLCBjbGFzc05hbWUgKSB7XG4gICAgZXh0ZW5kRGF0YVdpdGhDbGFzc0RlZmF1bHRzKCBkYXRhLCBjbGFzc05hbWUgKTtcbiAgfVxuXG4gIC8vIGdldCBpbmZvYm94IHByb3BlcnRpZXMgYW5kIGZpbHRlciB0aGUgb25lcyByZWxhdGVkIHRvIHN0eWxlIG9ubHlcbiAgZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0SW5mb2JveFN0eWxlID0gZnVuY3Rpb24oIG5vZGVDbGFzcywgaW5mb2JveFR5cGUgKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIG5vZGVDbGFzcyApO1xuICAgIHZhciBpbmZvYm94U3R5bGUgPSAkLmV4dGVuZCgge30sIGRlZmF1bHRQcm9wc1sgaW5mb2JveFR5cGUgXSApO1xuXG4gICAgLy8gd2lkdGggYW5kIGhlaWdodCBhcmUgYmVsb25naW5nIHRvIGJib3ggb2JqZWN0IHJhdGhlciB0aGFuIHN0eWxlIG9iamVjdFxuICAgIHZhciBub25TdHlsZVByb3BzID0gWyAnd2lkdGgnLCAnaGVpZ2h0JyBdO1xuXG4gICAgbm9uU3R5bGVQcm9wcy5mb3JFYWNoKCBmdW5jdGlvbiggcHJvcE5hbWUgKSB7XG4gICAgICBkZWxldGUgaW5mb2JveFN0eWxlWyBwcm9wTmFtZSBdO1xuICAgIH0gKTtcblxuICAgIHJldHVybiBpbmZvYm94U3R5bGU7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyA9IGZ1bmN0aW9uKCBzYmduY2xhc3MgKSB7XG4gICAgaWYgKCBzYmduY2xhc3MgPT0gdW5kZWZpbmVkICkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHZhciBwdXJlQ2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIHNiZ25jbGFzcyApO1xuXG4gICAgLy8gaW5pdCBkZWZhdWx0IHByb3BlcnRpZXMgZm9yIHRoZSBjbGFzcyBpZiBub3QgaW5pdGlhbGl6ZWQgeWV0XG4gICAgaWYgKCBkZWZhdWx0UHJvcGVydGllc1sgcHVyZUNsYXNzIF0gPT0gbnVsbCApIHtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzWyBwdXJlQ2xhc3MgXSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBkZWZhdWx0UHJvcGVydGllc1sgcHVyZUNsYXNzIF07XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5zZXREZWZhdWx0UHJvcGVydGllcyA9IGZ1bmN0aW9uKCBzYmduY2xhc3MsIHByb3BzICkge1xuICAgICQuZXh0ZW5kKCBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBzYmduY2xhc3MgKSwgcHJvcHMgKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmxvY2tHcmFwaFRvcG9sb2d5ID0gZnVuY3Rpb24oKSB7XG4gICAgZWxlbWVudFV0aWxpdGllcy5ncmFwaFRvcG9sb2d5TG9ja2VkID0gdHJ1ZTtcbiAgICBpZiAoIGN5LmV4cGFuZENvbGxhcHNlICkge1xuICAgICAgY3kuZXhwYW5kQ29sbGFwc2UoJ2dldCcpLmRpc2FibGVDdWUoKTtcbiAgICB9XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy51bmxvY2tHcmFwaFRvcG9sb2d5ID0gZnVuY3Rpb24oKSB7XG4gICAgZWxlbWVudFV0aWxpdGllcy5ncmFwaFRvcG9sb2d5TG9ja2VkID0gZmFsc2U7XG4gICAgaWYgKCBjeS5leHBhbmRDb2xsYXBzZSApIHtcbiAgICAgIGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKS5lbmFibGVDdWUoKTtcbiAgICB9XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5ncmFwaFRvcG9sb2d5TG9ja2VkO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMubGFuZ3VhZ2VUb01hcFR5cGUgPSBmdW5jdGlvbihsYW5nKSB7XG4gICAgc3dpdGNoIChsYW5nKSB7XG4gICAgICBjYXNlICdwcm9jZXNzIGRlc2NyaXB0aW9uJzpcbiAgICAgICAgcmV0dXJuICdQRCc7XG4gICAgICBjYXNlICdhY3Rpdml0eSBmbG93JzpcbiAgICAgICAgcmV0dXJuICdBRic7XG4gICAgICBjYXNlICdzaWYnOlxuICAgICAgICByZXR1cm4gJ1NJRic7XG4gICAgICBjYXNlICdoeWJyaWQgc2Jnbic6XG4gICAgICAgIHJldHVybiAnSHlicmlkU2Jnbic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ0h5YnJpZEFueSc7XG4gICAgfVxuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZVRvTGFuZ3VhZ2UgPSBmdW5jdGlvbihtYXBUeXBlKSB7XG4gICAgc3dpdGNoIChtYXBUeXBlKSB7XG4gICAgICBjYXNlICdQRCc6XG4gICAgICAgIHJldHVybiAncHJvY2VzcyBkZXNjcmlwdGlvbic7XG4gICAgICBjYXNlICdBRic6XG4gICAgICAgIHJldHVybiAnYWN0aXZpdHkgZmxvdyc7XG4gICAgICBjYXNlICdTSUYnOlxuICAgICAgICByZXR1cm4gJ3NpZic7XG4gICAgICBjYXNlICdIeWJyaWRTYmduJzpcbiAgICAgICAgcmV0dXJuICdoeWJyaWQgc2Jnbic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2h5YnJpZCBhbnknO1xuICAgIH1cbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldEFsbENvbGxhcHNlZENoaWxkcmVuUmVjdXJzaXZlbHkgPSBmdW5jdGlvbihub2Rlcykge1xuICAgIHZhciBleHBhbmRDb2xsYXBzZSA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKTtcbiAgICB2YXIgY29sbGFwc2VkQ2hpbGRyZW4gPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgdmFyIGNvbGxhcHNlZE5vZGVzID0gbm9kZXMuZmlsdGVyKFwiLmN5LWV4cGFuZC1jb2xsYXBzZS1jb2xsYXBzZWQtbm9kZVwiKTtcbiAgICBjb2xsYXBzZWROb2Rlcy5mb3JFYWNoKCBmdW5jdGlvbiggbiApIHtcbiAgICAgIGNvbGxhcHNlZENoaWxkcmVuID0gY29sbGFwc2VkQ2hpbGRyZW4udW5pb24oZXhwYW5kQ29sbGFwc2UuZ2V0Q29sbGFwc2VkQ2hpbGRyZW5SZWN1cnNpdmVseShuKSk7XG4gICAgfSApO1xuICAgIHJldHVybiBjb2xsYXBzZWRDaGlsZHJlbjtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldFdpZHRoQnlDb250ZW50ID0gZnVuY3Rpb24oIGNvbnRlbnQsIGZvbnRGYW1pbHksIGZvbnRTaXplLCBvcHRpb25zICkge1xuICAgIHJldHVybiB0ZXh0VXRpbGl0aWVzLmdldFdpZHRoQnlDb250ZW50KCBjb250ZW50LCBmb250RmFtaWx5LCBmb250U2l6ZSwgb3B0aW9ucyApO1xuICB9O1xuXG4gIHJldHVybiBlbGVtZW50VXRpbGl0aWVzO1xufVxuIiwiXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGN5O1xuICB2YXIgcGFyc2VkRGF0YU1hcDtcbiAgdmFyIHZpc2libGVEYXRhTWFwQnlFeHA7XG4gIHZhciBncm91cGVkRGF0YU1hcDtcbiAgdmFyIHZpc2libGVGaWxlcztcbiAgdmFyIGNvbG9yTWFwO1xuICB2YXIgYWxsVmlzO1xuICB2YXIgZmlsZURlc2NyaXB0aW9uO1xuICB2YXIgZmlsZVRpdGxlO1xuICBmdW5jdGlvbiBleHBlcmltZW50YWxEYXRhT3ZlcmxheShwYXJhbSkge1xuICAgIC8vIEluaXRcbiAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG4gICAgcGFyc2VkRGF0YU1hcCA9IHt9O1xuICAgIHZpc2libGVEYXRhTWFwQnlFeHAgPSB7fTtcbiAgICB2aXNpYmxlRmlsZXMgPSB7fTtcbiAgICBncm91cGVkRGF0YU1hcCA9IHt9O1xuICAgIGNvbG9yTWFwID0ge307XG4gICAgYWxsVmlzID0gdHJ1ZTtcblxuICAgIGZpbGVEZXNjcmlwdGlvbiA9IHt9O1xuICAgIGZpbGVUaXRsZSA9IHt9O1xuICB9XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuZ2V0TmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZm5hbWU7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuZ2V0RGVzYyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmRlc2M7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuZ2V0R3JvdXBlZERhdGFNYXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdyb3VwZWREYXRhTWFwO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmdldFBhcnNlZERhdGFNYXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHBhcnNlZERhdGFNYXA7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuZ2V0VmlzaWJsZURhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHZpc2libGVEYXRhTWFwQnlFeHA7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaGlkZUFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW52aXNpYmxlRXhwID0ge307XG4gICAgdmFyIGludmlzaWJsZUZpbGUgPSB7fTtcbiAgICBhbGxWaXMgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGkgaW4gZ3JvdXBlZERhdGFNYXApIHtcbiAgICAgIGlmICh2aXNpYmxlRmlsZXNbaV0pIHtcbiAgICAgICAgdmlzaWJsZUZpbGVzW2ldID0gZmFsc2U7XG4gICAgICAgIGludmlzaWJsZUZpbGVbaV0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgZmlsZU5hbWUgaW4gZ3JvdXBlZERhdGFNYXApIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGV4cE5hbWUgPSBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV1bal07XG4gICAgICAgIGlmICh2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID09IHRydWUpIHtcbiAgICAgICAgICBpbnZpc2libGVFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IGZhbHNlO1xuICAgICAgICAgIHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHBhcmFtcyA9IHtpbnZpc2libGVGaWxlLCBpbnZpc2libGVFeHB9O1xuICAgIHJldHVybiBwYXJhbXM7XG5cbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5oaWRlQWxsVW5kbyA9IGZ1bmN0aW9uIChpbnZpc2libGVGaWxlLCBpbnZpc2libGVFeHApIHtcbiAgICBmb3IgKGxldCBqIGluIGludmlzaWJsZUZpbGUpIHtcbiAgICAgIHZpc2libGVGaWxlc1tqXSA9IHRydWU7XG4gICAgfVxuICAgIGZvciAobGV0IGogaW4gaW52aXNpYmxlRXhwKSB7XG4gICAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwW2pdID0gdHJ1ZTtcbiAgICB9XG4gICAgYWxsVmlzID0gdHJ1ZTtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnVuaGlkZUFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmlzaWJsZUV4cCA9IHt9O1xuICAgIHZhciB2aXNpYmxlRmlsZSA9IHt9O1xuICAgIGFsbFZpcyA9IHRydWU7XG4gICAgZm9yIChsZXQgaSBpbiB2aXNpYmxlRmlsZXMpIHtcbiAgICAgIGlmICghdmlzaWJsZUZpbGVzW2ldKSB7XG4gICAgICAgIHZpc2libGVGaWxlc1tpXSA9IHRydWU7XG4gICAgICAgIHZpc2libGVGaWxlW2ldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgZmlsZU5hbWUgaW4gZ3JvdXBlZERhdGFNYXApIHtcbiAgICAgIGlmIChncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGV4cE5hbWUgPSBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV1bal07XG4gICAgICAgIGlmICh2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID09IGZhbHNlKSB7XG4gICAgICAgICAgdmlzaWJsZUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2hvd0RhdGEoKTtcbiAgICByZXR1cm4ge3Zpc2libGVFeHAsIHZpc2libGVGaWxlfTtcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS51bmhpZGVBbGxVbmRvID0gZnVuY3Rpb24gKHZpc2libGVGaWxlLCB2aXNpYmxlRXhwKSB7XG4gICAgZm9yIChsZXQgaiBpbiB2aXNpYmxlRmlsZSkge1xuICAgICAgdmlzaWJsZUZpbGVzW2pdID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAobGV0IGogaW4gdmlzaWJsZUV4cCkge1xuICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cFtqXSA9IGZhbHNlO1xuICAgIH1cbiAgICBhbGxWaXMgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnJlbW92ZUFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyc2VkID0ge307XG4gICAgdmFyIHZpc2libGUgPSB7fTtcbiAgICB2YXIgZ3JvdXBlZCA9IHt9O1xuICAgIHZhciB2aXNpYmxlZiA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSBpbiBwYXJzZWREYXRhTWFwKSB7XG4gICAgICBpZiAoIXBhcnNlZFtpXSkge1xuICAgICAgICBwYXJzZWRbaV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogaW4gcGFyc2VkRGF0YU1hcFtpXSkge1xuICAgICAgICBwYXJzZWRbaV1bal0gPSBwYXJzZWREYXRhTWFwW2ldW2pdO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpIGluIHZpc2libGVEYXRhTWFwQnlFeHApIHtcbiAgICAgIHZpc2libGVbaV0gPSB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ldO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgaW4gdmlzaWJsZUZpbGVzKSB7XG4gICAgICB2aXNpYmxlZltpXSA9IHZpc2libGVGaWxlc1tpXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSBpbiBncm91cGVkRGF0YU1hcCkge1xuICAgICAgaWYgKCFncm91cGVkW2ldKSB7XG4gICAgICAgIGdyb3VwZWRbaV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogaW4gZ3JvdXBlZERhdGFNYXBbaV0pIHtcbiAgICAgICAgZ3JvdXBlZFtpXS5wdXNoKGdyb3VwZWREYXRhTWFwW2ldW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyc2VkRGF0YU1hcCA9IHt9O1xuICAgIHZpc2libGVEYXRhTWFwQnlFeHAgPSB7fTtcbiAgICB2aXNpYmxlRmlsZXMgPSB7fTtcbiAgICBncm91cGVkRGF0YU1hcCA9IHt9O1xuICAgIHRoaXMuc2hvd0RhdGEoKTtcbiAgICBwYXJhbXMgPSB7cGFyc2VkLCB2aXNpYmxlLCBncm91cGVkLCB2aXNpYmxlZn07XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5yZXN0b3JlQWxsID0gZnVuY3Rpb24gKHBhcnNlZCwgdmlzaWJsZSwgZ3JvdXBlZCwgdmlzaWJsZWYpIHtcbiAgICBwYXJzZWREYXRhTWFwID0gcGFyc2VkO1xuICAgIHZpc2libGVEYXRhTWFwQnlFeHAgPSB2aXNpYmxlO1xuICAgIGdyb3VwZWREYXRhTWFwID0gZ3JvdXBlZDtcbiAgICB2aXNpYmxlRmlsZXMgPSB2aXNpYmxlZjtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcGFyYW0gPSB7fTtcbiAgICByZXR1cm4gcGFyYW07XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuYWRkRXhwID0gZnVuY3Rpb24gKGZpbGVOYW1lLCBleHBOYW1lLCBpc1Zpc2libGUsIHZhbHVlcywgZ3JvdXBBcnJheSkge1xuICAgIHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IGlzVmlzaWJsZTtcbiAgICBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0gPSBncm91cEFycmF5O1xuXG4gICAgZm9yIChsZXQgaSBpbiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZXNbaV1bZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSAhPSB1bmRlZmluZWQpXG4gICAgICAgIHBhcnNlZERhdGFNYXBbaV1bZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IHZhbHVlc1tpXVtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdO1xuICAgIH1cblxuICAgIHZhciBwYXJhbXMgPSB7ZmlsZU5hbWUsIGV4cE5hbWV9O1xuICAgIHRoaXMuc2hvd0RhdGEoKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmFkZEZpbGUgPSBmdW5jdGlvbiAoZmlsZU5hbWUsIHBhcnNlZCwgdmlzaWJsZSwgZ3JvdXBlZCwgdmlzaWJsZWYpIHtcbiAgICBwYXJzZWREYXRhTWFwID0gcGFyc2VkO1xuICAgIHZpc2libGVEYXRhTWFwQnlFeHAgPSB2aXNpYmxlO1xuICAgIGdyb3VwZWREYXRhTWFwID0gZ3JvdXBlZDtcbiAgICB2aXNpYmxlRmlsZXMgPSB2aXNpYmxlZjtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcGFyYW0gPSB7ZmlsZU5hbWV9O1xuICAgIHJldHVybiBwYXJhbTtcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5yZW1vdmVFeHAgPSBmdW5jdGlvbiAoZmlsZU5hbWUsIGV4cE5hbWUpIHtcbiAgICB2YXIgaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgIHZhciBncm91cEFycmF5ID0gW107XG5cbiAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdICE9IHVuZGVmaW5lZCkge1xuICAgICAgaXNWaXNpYmxlID0gdmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdO1xuICAgICAgZGVsZXRlIHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdICE9IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChsZXQgaSBpbiBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0pIHtcbiAgICAgICAgZ3JvdXBBcnJheVtpXSA9IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXVtpXTtcbiAgICAgIH1cbiAgICAgIC8vZ3JvdXBBcnJheSA9IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXTtcbiAgICAgIHZhciBpbmRleCA9IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXS5pbmRleE9mKGV4cE5hbWUpO1xuXG4gICAgICBpZiAoaW5kZXggIT0gLTEpIHtcbiAgICAgICAgZGVsZXRlIGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXVtpbmRleF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSBpbiBwYXJzZWREYXRhTWFwKSB7XG4gICAgICBpZiAocGFyc2VkRGF0YU1hcFtpXVtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdICE9IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoIShpIGluIHZhbHVlcykpIHtcbiAgICAgICAgICB2YWx1ZXNbaV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXNbaV1bZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IHBhcnNlZERhdGFNYXBbaV1bZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXTtcbiAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFNYXBbaV1bZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdICE9IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdW2ldKVxuICAgICAgICAgIGNvdW50Kys7XG4gICAgICB9XG4gICAgICBpZiAoY291bnQgPT0gZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdLmxlbmd0aCkge1xuICAgICAgICBkZWxldGUgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJhbXMgPSB7ZmlsZU5hbWUsIGV4cE5hbWUsIGlzVmlzaWJsZSwgdmFsdWVzLCBncm91cEFycmF5fTtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5yZW1vdmVGaWxlID0gZnVuY3Rpb24gKGZpbGVOYW1lKSB7XG4gICAgaWYgKGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgcGFyc2VkID0ge307XG4gICAgdmFyIHZpc2libGUgPSB7fTtcbiAgICB2YXIgZ3JvdXBlZCA9IHt9O1xuICAgIHZhciB2aXNpYmxlZiA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSBpbiBwYXJzZWREYXRhTWFwKSB7XG4gICAgICBpZiAoIXBhcnNlZFtpXSkge1xuICAgICAgICBwYXJzZWRbaV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogaW4gcGFyc2VkRGF0YU1hcFtpXSkge1xuICAgICAgICBwYXJzZWRbaV1bal0gPSBwYXJzZWREYXRhTWFwW2ldW2pdO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpIGluIHZpc2libGVEYXRhTWFwQnlFeHApIHtcbiAgICAgIHZpc2libGVbaV0gPSB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ldO1xuICAgIH1cbiAgICBmb3IgKGxldCBpIGluIHZpc2libGVGaWxlcykge1xuICAgICAgdmlzaWJsZWZbaV0gPSB2aXNpYmxlRmlsZXNbaV07XG4gICAgfVxuICAgIGZvciAobGV0IGkgaW4gZ3JvdXBlZERhdGFNYXApIHtcbiAgICAgIGlmICghZ3JvdXBlZFtpXSkge1xuICAgICAgICBncm91cGVkW2ldID0gW107XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqIGluIGdyb3VwZWREYXRhTWFwW2ldKSB7XG4gICAgICAgIGdyb3VwZWRbaV0ucHVzaChncm91cGVkRGF0YU1hcFtpXVtqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGV4cE5hbWUgPSBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV1bal07XG4gICAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdICE9IHVuZGVmaW5lZClcbiAgICAgICAgZGVsZXRlIHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXTtcbiAgICAgIGZvciAobGV0IGkgaW4gcGFyc2VkRGF0YU1hcCkge1xuICAgICAgICBkZWxldGUgcGFyc2VkRGF0YU1hcFtpXVtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBkZWxldGUgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdO1xuXG4gICAgdmFyIHBhcmFtcyA9IHtmaWxlTmFtZSwgcGFyc2VkLCB2aXNpYmxlLCBncm91cGVkLCB2aXNpYmxlZn07XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHZhciBrID0gMDtcbiAgICBmb3IgKGxldCBpIGluIGdyb3VwZWREYXRhTWFwKVxuICAgIHtcbiAgICAgIGsrKztcbiAgICB9XG4gICAgaWYgKGsgPT0gMCkge1xuICAgICAgZ3JvdXBlZERhdGFNYXAgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5oaWRlRXhwID0gZnVuY3Rpb24gKGZpbGVOYW1lLCBleHBOYW1lKSB7XG4gICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm47XG4gICAgdmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID0gZmFsc2U7XG4gICAgcGFyYW1zID0ge2ZpbGVOYW1lLCBleHBOYW1lfTtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmhpZGVGaWxlID0gZnVuY3Rpb24gKGZpbGVOYW1lKSB7XG4gICAgdmlzaWJsZUZpbGVzW2ZpbGVOYW1lXSA9IGZhbHNlO1xuICAgIHZhciBpbnZpc2libGUgPSB7fTtcbiAgICBpZiAoZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgZXhwTmFtZSA9IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXVtqXTtcbiAgICAgIGlmICh2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGlmICh2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPT0gdHJ1ZSkge1xuICAgICAgICBpbnZpc2libGVbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IGZhbHNlO1xuICAgICAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcGFyYW1zID0ge2ZpbGVOYW1lLCBpbnZpc2libGV9O1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaGlkZUZpbGVVbmRvID0gZnVuY3Rpb24gKGZpbGVOYW1lLCBpbnZpc2libGUpIHtcbiAgICBpZiAodmlzaWJsZUZpbGVzW2ZpbGVOYW1lXSAhPSB1bmRlZmluZWQpXG4gICAgICB2aXNpYmxlRmlsZXNbZmlsZU5hbWVdID0gdHJ1ZTtcbiAgICBlbHNlXG4gICAgICByZXR1cm47XG4gICAgZm9yIChsZXQgaiBpbiBpbnZpc2libGUpIHtcbiAgICAgIHZpc2libGVEYXRhTWFwQnlFeHBbal0gPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuIHtmaWxlTmFtZX07XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkudW5oaWRlRXhwID0gZnVuY3Rpb24gKGZpbGVOYW1lLCBleHBOYW1lKSB7XG4gICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm47XG4gICAgdmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID0gdHJ1ZTtcbiAgICBwYXJhbXMgPSB7ZmlsZU5hbWUsIGV4cE5hbWV9O1xuICAgIHRoaXMuc2hvd0RhdGEoKTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnVuaGlkZUZpbGUgPSBmdW5jdGlvbiAoZmlsZU5hbWUpIHtcbiAgICB2YXIgdmlzaWJsZSA9IHt9O1xuICAgIHZpc2libGVGaWxlc1tmaWxlTmFtZV0gPSB0cnVlO1xuICAgIGlmIChncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBleHBOYW1lID0gZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdW2pdO1xuICAgICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9PSB1bmRlZmluZWQpXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9PSBmYWxzZSkge1xuICAgICAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSB0cnVlO1xuICAgICAgICB2aXNpYmxlW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcGFyYW1zID0ge2ZpbGVOYW1lLCB2aXNpYmxlfTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnVuaGlkZUZpbGVVbmRvID0gZnVuY3Rpb24gKGZpbGVOYW1lLCB2aXNpYmxlKSB7XG4gICAgdmlzaWJsZUZpbGVzW2ZpbGVOYW1lXSA9IGZhbHNlO1xuICAgIGZvciAobGV0IGogaW4gdmlzaWJsZSkge1xuICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cFtqXSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuIHtmaWxlTmFtZX07XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuY291bnRWaXNpYmxlRGF0YUJ5RXhwID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIENvdW50IHRoZSBnZW5vbWljIGRhdGEgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiBub2RlcycgYm9keVxuICAgIGxldCBkYXRhQm94Q291bnQgPSAwO1xuICAgIGZvciAobGV0IGV4cCBpbiB2aXNpYmxlRGF0YU1hcEJ5RXhwKSB7XG4gICAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtleHBdKSB7XG4gICAgICAgIGRhdGFCb3hDb3VudCsrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YUJveENvdW50O1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmdlbmVyYXRlU1ZHRm9yTm9kZSA9IGZ1bmN0aW9uIChlbGUsIHRvb2x0aXApIHtcbiAgICBjb25zdCBkYXRhQm94Q291bnQgPSB0aGlzLmNvdW50VmlzaWJsZURhdGFCeUV4cCgpO1xuICAgIHZhciB2YWx1ZXMgPSBbXTsgICBcbiAgICAvLyBFeHBlcmltZW50YWwgZGF0YSBvdmVybGF5IHBhcnQgIVxuICAgIC8vIGNvbnN0IGRhdGFVUkkgPSAnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJ1xuICAgIGNvbnN0IHN2Z05hbWVTcGFjZSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4gICAgY29uc3Qgbm9kZUxhYmVsID0gZWxlLmRhdGEoJ2xhYmVsJyk7XG4gICAgY29uc3QgcmVxV2lkdGggPSBlbGUub3V0ZXJXaWR0aCgpO1xuICAgIGNvbnN0IHJlcUhlaWdodCA9IGVsZS5vdXRlckhlaWdodCgpO1xuICAgIGNvbnN0IG92ZXJsYXlSZWNCb3hXID0gcmVxV2lkdGg7XG4gICAgY29uc3Qgb3ZlcmxheVJlY0JveEggPSByZXFIZWlnaHQ7XG4gICAgY29uc3Qgc3ZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05hbWVTcGFjZSwgJ3N2ZycpO1xuICAgIC8vIEl0IHNlZW1zIHRoaXMgc2hvdWxkIGJlIHNldCBhY2NvcmRpbmcgdG8gdGhlIG5vZGUgc2l6ZSAhXG4gICAgc3ZnLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCByZXFXaWR0aCk7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgcmVxSGVpZ2h0KTtcbiAgICAvLyBUaGlzIGlzIGltcG9ydGFudCB5b3UgbmVlZCB0byBpbmNsdWRlIHRoaXMgdG8gc3VjY2VzZnVsbHkgcmVuZGVyIGluIGN5dG9zY2FwZS5qcyFcbiAgICBzdmcuc2V0QXR0cmlidXRlKCd4bWxucycsIHN2Z05hbWVTcGFjZSk7XG5cbiAgICAvLyBPdmVybGF5IERhdGEgUmVjdFxuICAgIGNvbnN0IG92ZXJMYXlSZWN0QkJveCA9IHtcbiAgICAgIHc6IG92ZXJsYXlSZWNCb3hXLFxuICAgICAgaDogb3ZlcmxheVJlY0JveEgsXG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG5cbiAgICBjb25zdCBmcmVxdWVuY3lEYXRhID0gcGFyc2VkRGF0YU1hcFtub2RlTGFiZWxdO1xuXG4gICAgbGV0IG1heERhdGFCb3hDb3VudCA9IC8qKGdlbm9taWNEYXRhQm94Q291bnQgPiAzKSA/IDM6Ki8gZGF0YUJveENvdW50O1xuICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgIGZvciAobGV0IGkgaW4gZ3JvdXBlZERhdGFNYXApIHtcbiAgICAgIGZvciAobGV0IGogaW4gZ3JvdXBlZERhdGFNYXBbaV0pIHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBpO1xuICAgICAgICBjb25zdCBleHBOYW1lID0gZ3JvdXBlZERhdGFNYXBbaV1bal07XG4gICAgICAgIGlmICghdmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmcmVxdWVuY3lEYXRhW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gIT09IHVuZGVmaW5lZCkgeyAgICAgICAgIFxuICAgICAgICAgIHZhbHVlcy5wdXNoKGZyZXF1ZW5jeURhdGFbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSk7XG4gICAgICAgICAgZGF0YVJlY3RhbmdsZUdlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgIG92ZXJMYXlSZWN0QkJveC54ICtcbiAgICAgICAgICAgICAgICAgIChjb3VudGVyICogb3ZlckxheVJlY3RCQm94LncpIC8gbWF4RGF0YUJveENvdW50LFxuICAgICAgICAgICAgICAgICAgb3ZlckxheVJlY3RCQm94LnksXG4gICAgICAgICAgICAgICAgICBvdmVyTGF5UmVjdEJCb3gudyAvIG1heERhdGFCb3hDb3VudCxcbiAgICAgICAgICAgICAgICAgIG92ZXJMYXlSZWN0QkJveC5oLFxuICAgICAgICAgICAgICAgICAgZnJlcXVlbmN5RGF0YVtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdLFxuICAgICAgICAgICAgICAgICAgc3ZnLFxuICAgICAgICAgICAgICAgICAgZmlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWVzLnB1c2goXCItXCIpO1xuICAgICAgICAgIGRhdGFSZWN0YW5nbGVHZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICBvdmVyTGF5UmVjdEJCb3gueCArXG4gICAgICAgICAgICAgICAgICAoY291bnRlciAqIG92ZXJMYXlSZWN0QkJveC53KSAvIG1heERhdGFCb3hDb3VudCxcbiAgICAgICAgICAgICAgICAgIG92ZXJMYXlSZWN0QkJveC55LFxuICAgICAgICAgICAgICAgICAgb3ZlckxheVJlY3RCQm94LncgLyBtYXhEYXRhQm94Q291bnQsXG4gICAgICAgICAgICAgICAgICBvdmVyTGF5UmVjdEJCb3guaCxcbiAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICBzdmcsXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZVxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgICAgIC8vICBkcmF3IHNlcGFyYXRvciBsaW5lIGJldHdlZW4gZGF0YSByZWN0YW5nbGVzXG4gICAgICAgIGlmIChjb3VudGVyIDwgbWF4RGF0YUJveENvdW50IC0gMSkge1xuICAgICAgICAgIGNvbnN0IG92ZXJsYXlSZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05hbWVTcGFjZSwgJ2xpbmUnKTtcbiAgICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ3gxJywgb3ZlckxheVJlY3RCQm94LnggKyAoY291bnRlciAqIG92ZXJMYXlSZWN0QkJveC53KSAvIG1heERhdGFCb3hDb3VudFxuICAgICAgICAgICAgICAgICAgKyBvdmVyTGF5UmVjdEJCb3gudyAvIG1heERhdGFCb3hDb3VudCk7XG4gICAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCd5MScsIG92ZXJMYXlSZWN0QkJveC55KTtcbiAgICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ3gyJywgb3ZlckxheVJlY3RCQm94LnggKyAoY291bnRlciAqIG92ZXJMYXlSZWN0QkJveC53KSAvIG1heERhdGFCb3hDb3VudFxuICAgICAgICAgICAgICAgICAgKyBvdmVyTGF5UmVjdEJCb3gudyAvIG1heERhdGFCb3hDb3VudCk7XG4gICAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCd5MicsIG92ZXJMYXlSZWN0QkJveC55ICsgb3ZlckxheVJlY3RCQm94LmgpO1xuICAgICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgICAgICAgICAnc3Ryb2tlLXdpZHRoOjE7c3Ryb2tlOnJnYig4NSw4NSw4NSk7J1xuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICBzdmcuYXBwZW5kQ2hpbGQob3ZlcmxheVJlY3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvdW50ZXIrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0b29sdGlwLmNvbnRlbnQgPSBcIihcIiArIHZhbHVlcy5qb2luKFwiLFwiKSArIFwiKVwiO1xuXG4gICAgZnVuY3Rpb24gaW50ZXJwb2xhdGVDb2xvcihjb2xvcjEsIGNvbG9yMiwgZmFjdG9yKSB7XG4gICAgICB2YXIgcmVzdWx0ID0gY29sb3IxLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDM7IGkrKykge1xuICAgICAgICByZXN1bHRbaV0gPSBNYXRoLnJvdW5kKHJlc3VsdFtpXSArIGZhY3RvciAqIChjb2xvcjJbaV0gLSBjb2xvcjFbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGRlY2lkZUNvbG9yKHBlcmNlbnQsIGZpbGVOYW1lKSB7XG4gICAgICB2YXIgc29ydGVkID0gW107XG4gICAgICBmb3IgKGxldCBpIGluIGNvbG9yTWFwW2ZpbGVOYW1lXSkge1xuICAgICAgICBzb3J0ZWQucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIHNvcnRlZC5zb3J0KCk7XG5cbiAgICAgIHZhciBwcmV2ID0gc29ydGVkWzBdO1xuICAgICAgdmFyIG5leHQgPSBzb3J0ZWRbc29ydGVkLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAocGVyY2VudCA8IHByZXYgfHwgcGVyY2VudCA+IG5leHQpIHtcbiAgICAgICAgcmV0dXJuICh7cjogMjEwLCBnOiAyMTAsIGI6IDIxMH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBrIGluIHNvcnRlZCkge1xuICAgICAgICB2YXIgaSA9IHNvcnRlZFtrXTtcbiAgICAgICAgaWYgKGkgPT0gcGVyY2VudCkge1xuICAgICAgICAgIHJldHVybiAoe3I6IGNvbG9yTWFwW2ZpbGVOYW1lXVtpXVswXSwgZzogY29sb3JNYXBbZmlsZU5hbWVdW2ldWzFdLCBiOiBjb2xvck1hcFtmaWxlTmFtZV1baV1bMl19KTtcbiAgICAgICAgfSBlbHNlIGlmIChpID4gcGVyY2VudCkge1xuICAgICAgICAgIG5leHQgPSBpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXYgPSBpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGVwcyA9IDEgLyAobmV4dCAtIHByZXYpO1xuICAgICAgdmFyIHJlcyA9IGludGVycG9sYXRlQ29sb3IoY29sb3JNYXBbZmlsZU5hbWVdW3ByZXZdLCBjb2xvck1hcFtmaWxlTmFtZV1bbmV4dF0sIHN0ZXBzICogKHBlcmNlbnQgLSBwcmV2KSk7XG5cbiAgICAgIHJldHVybiAoe3I6IHJlc1swXSwgZzogcmVzWzFdLCBiOiByZXNbMl19KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGF0YVJlY3RhbmdsZUdlbmVyYXRvcih4LCB5LCB3LCBoLCBwZXJjZW50LCBwYXJlbnRTVkcsIGZpbGVOYW1lKSB7XG4gICAgICBsZXQgY29sb3JTdHJpbmcgPSAnJztcbiAgICAgIGlmIChwZXJjZW50KSB7XG4gICAgICAgIHZhciBjb2xvciA9IGRlY2lkZUNvbG9yKHBhcnNlSW50KHBlcmNlbnQpLCBmaWxlTmFtZSk7XG4gICAgICAgIGNvbG9yU3RyaW5nID1cbiAgICAgICAgICAgICAgICAncmdiKCcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoY29sb3IucikgK1xuICAgICAgICAgICAgICAgICcsJyArXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChjb2xvci5nKSArXG4gICAgICAgICAgICAgICAgJywnICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGNvbG9yLmIpICsgJyknO1xuICAgICAgICAvLyBSZWN0YW5nbGUgUGFydFxuICAgICAgICBjb25zdCBvdmVybGF5UmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOYW1lU3BhY2UsICdyZWN0Jyk7XG4gICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZSgneCcsIHgpO1xuICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ3knLCB5KTtcbiAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCd3aWR0aCcsIHcpO1xuICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGgpO1xuICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ29wYWNpdHk6MTtmaWxsOicgKyBjb2xvclN0cmluZyArICc7Jyk7XG5cbiAgICAgICAgcGFyZW50U1ZHLmFwcGVuZENoaWxkKG92ZXJsYXlSZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbG9yU3RyaW5nID0gJ3JnYigyMTAsMjEwLDIxMCknO1xuXG4gICAgICAgIC8vIFJlY3RhbmdsZSBQYXJ0XG4gICAgICAgIGNvbnN0IG92ZXJsYXlSZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHN2Z05hbWVTcGFjZSwgJ3JlY3QnKTtcbiAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCd4JywgeCk7XG4gICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZSgneScsIHkpO1xuICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgdyk7XG4gICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgaCk7XG4gICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnb3BhY2l0eToxO2ZpbGw6JyArIGNvbG9yU3RyaW5nICsgJzsnKTtcblxuICAgICAgICBwYXJlbnRTVkcuYXBwZW5kQ2hpbGQob3ZlcmxheVJlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdmc7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuc2hvd0RhdGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdmFyIG5vZGVDb2xsZWN0aW9uID0gY3kuY29sbGVjdGlvbigpO1xuICAgIHZhciBjb2xsYXBzZWRDaGlsZHJlbiA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKS5nZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5KCkuZmlsdGVyKFwibm9kZVwiKTtcbiAgICB2YXIgY29sbGFwc2VkQ2hpbGRyZW5Ob3RQYXJlbnQgPSBjeS5jb2xsZWN0aW9uKCk7XG4gICAgdmFyIHBhcmVudFNldCA9IG5ldyBTZXQoKTsgIC8vIHBhcmVudCBpZHMgb2YgY29sbGFwc2VkIGNoaWxkcmVuXG4gICAgY29sbGFwc2VkQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgIHBhcmVudFNldC5hZGQobm9kZS5wYXJlbnQoKS5pZCgpKTtcbiAgICB9KTtcbiAgICAvLyBmaWx0ZXIgcGFyZW50IG5vZGVzIGZyb20gY29sbGFwc2VkIGNoaWxkcmVuXG4gICAgY29sbGFwc2VkQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgIGlmKCFwYXJlbnRTZXQuaGFzKG5vZGUuaWQoKSkpeyAvLyB0aGlzIG1lYW5zIHJlbW92ZWQgbm9kZSBpcyBub3QgcGFyZW50XG4gICAgICAgIGNvbGxhcHNlZENoaWxkcmVuTm90UGFyZW50ID0gY29sbGFwc2VkQ2hpbGRyZW5Ob3RQYXJlbnQudW5pb24obm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGV4cGFuZGFibGVOb2RlcyA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKS5leHBhbmRhYmxlTm9kZXMoKTtcbiAgICBub2RlQ29sbGVjdGlvbiA9IG5vZGVDb2xsZWN0aW9uLnVuaW9uKGN5Lm5vZGVzKCkpLnVuaW9uKGNvbGxhcHNlZENoaWxkcmVuTm90UGFyZW50KS5kaWZmZXJlbmNlKGV4cGFuZGFibGVOb2Rlcyk7XG4gICAgY3kuYmF0Y2goZnVuY3Rpb24oKXtcbiAgICAgIG5vZGVDb2xsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgY29uc3Qgbm9kZUxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpO1xuICAgICAgICB2YXIgaW1hZ2VVUkkgPSAnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJztcbiAgICAgICAgaWYgKG5vZGVMYWJlbCBpbiBwYXJzZWREYXRhTWFwICYmICFub2RlLmlzUGFyZW50KCkpIHtcblxuICAgICAgICAgIHZhciB0b29sdGlwID0ge2NvbnRlbnQ6Jyd9O1xuICAgICAgICAgIGltYWdlVVJJID0gaW1hZ2VVUkkgKyBlbmNvZGVVUklDb21wb25lbnQoc2VsZi5nZW5lcmF0ZVNWR0Zvck5vZGUobm9kZSx0b29sdGlwKS5vdXRlckhUTUwpO1xuXG4gICAgICAgICAgaWYoT2JqZWN0LmtleXMocGFyc2VkRGF0YU1hcFtub2RlTGFiZWxdKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgLy8gdmFyIHRvb2x0aXAgPSBcIihcIiArIE9iamVjdC52YWx1ZXMocGFyc2VkRGF0YU1hcFtub2RlTGFiZWxdKS5qb2luKFwiLFwiKSArIFwiKVwiO1xuICAgICAgICAgICAgbm9kZS5kYXRhKFwidG9vbHRpcFwiLHRvb2x0aXAuY29udGVudCk7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBub2RlLmRhdGEoJ3Rvb2x0aXAnLCcnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJywgaW1hZ2VVUkkpLFxuICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnLCAnMTAwJScpO1xuICAgICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15JywgJzEwMCUnKTtcbiAgICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtd2lkdGgnLCAnMTAwJScpO1xuICAgICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1oZWlnaHQnLCAnMTAwJScpO1xuICAgICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1maXQnLCAnY29udGFpbicpO1xuICAgICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5JywgJzEnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnLCBcIlwiKTtcbiAgICAgICAgICBub2RlLmRhdGEoJ3Rvb2x0aXAnLCcnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7ICAgICAgXG4gICAgICBcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5oZXhUb1JnYiA9IGZ1bmN0aW9uIChoZXgpIHtcbiAgICBpZiAoaGV4WzBdID09ICcjJykge1xuICAgICAgaGV4ID0gaGV4LnN1YnN0cmluZygxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYmlnaW50ID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gICAgdmFyIHIgPSAoYmlnaW50ID4+IDE2KSAmIDI1NTtcbiAgICB2YXIgZyA9IChiaWdpbnQgPj4gOCkgJiAyNTU7XG4gICAgdmFyIGIgPSBiaWdpbnQgJiAyNTU7XG4gICAgcmV0dXJuIFtyLCBnLCBiXTtcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5pc0hleCA9IGZ1bmN0aW9uIChoZXgpIHtcbiAgICByZXR1cm4gdHlwZW9mIGhleCA9PSAnc3RyaW5nJ1xuICAgICAgICAgICAgJiYgaGV4Lmxlbmd0aCA9PSA3XG4gICAgICAgICAgICAmJiAhaXNOYU4oTnVtYmVyKCcweCcgKyBoZXguc3Vic3RyaW5nKDEpKSlcbiAgICAgICAgICAgICYmIGhleFswXSA9PSAnIyc7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkucGFyc2VEYXRhID0gZnVuY3Rpb24gKGRhdGEsIGZpbGVOYW1lLCBlcnJvckNhbGxiYWNrLCBzYW1wbGVFeHBlcmltZW50KSB7XG4gICAgcGFyc2VkRGF0YU1hcCA9IHBhcnNlZERhdGFNYXAgfHwge307XG4gICAgdmlzaWJsZURhdGFNYXBCeUV4cCA9IHZpc2libGVEYXRhTWFwQnlFeHAgfHwge307XG4gICAgZ3JvdXBlZERhdGFNYXAgPSBncm91cGVkRGF0YU1hcCB8fCB7fTtcbiAgICBjb2xvck1hcCA9IGNvbG9yTWFwIHx8IHt9O1xuICAgIGNvbnN0IGV4cGVyaW1lbnRzID0gW107XG4gICAgdmFyIGNvbG9ycyA9IHt9O1xuXG4gICAgaWYgKGZpbGVOYW1lIGluIGdyb3VwZWREYXRhTWFwICYmICFzYW1wbGVFeHBlcmltZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpbGVOYW1lIGluIGdyb3VwZWREYXRhTWFwICYmIHNhbXBsZUV4cGVyaW1lbnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlQWxsKCk7XG4gICAgfVxuXG4gICAgdmFyIHBhcnNlZCA9IHt9O1xuICAgIHZhciB2aXNpYmxlID0ge307XG4gICAgdmFyIGdyb3VwZWQgPSB7fTtcbiAgICB2YXIgdmlzaWJsZWYgPSB7fTtcbiAgICB2YXIgY29sb3JtID0ge307XG4gICAgdmFyIGZpbGVEID0ge307XG4gICAgdmFyIGZpbGVOID0ge307XG5cbiAgICBmb3IgKGxldCBpIGluIHBhcnNlZERhdGFNYXApIHtcbiAgICAgIGlmICghcGFyc2VkW2ldKSB7XG4gICAgICAgIHBhcnNlZFtpXSA9IHt9O1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaiBpbiBwYXJzZWREYXRhTWFwW2ldKSB7XG4gICAgICAgIHBhcnNlZFtpXVtqXSA9IHBhcnNlZERhdGFNYXBbaV1bal07XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgaW4gdmlzaWJsZURhdGFNYXBCeUV4cCkge1xuICAgICAgdmlzaWJsZVtpXSA9IHZpc2libGVEYXRhTWFwQnlFeHBbaV07XG4gICAgfVxuICAgIGZvciAobGV0IGkgaW4gdmlzaWJsZUZpbGVzKSB7XG4gICAgICB2aXNpYmxlZltpXSA9IHZpc2libGVGaWxlc1tpXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSBpbiBncm91cGVkRGF0YU1hcCkge1xuICAgICAgaWYgKCFncm91cGVkW2ldKSB7XG4gICAgICAgIGdyb3VwZWRbaV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogaW4gZ3JvdXBlZERhdGFNYXBbaV0pIHtcbiAgICAgICAgZ3JvdXBlZFtpXS5wdXNoKGdyb3VwZWREYXRhTWFwW2ldW2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpIGluIGNvbG9yTWFwKSB7XG4gICAgICBjb2xvcm1baV0gPSBjb2xvck1hcFtpXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpIGluIHZpc2libGVGaWxlcykge1xuICAgICAgZmlsZURbaV0gPSBmaWxlRGVzY3JpcHRpb25baV07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSBpbiB2aXNpYmxlRmlsZXMpIHtcbiAgICAgIGZpbGVOW2ldID0gZmlsZVRpdGxlW2ldO1xuICAgIH1cblxuICAgIHZhciBpbnRyZWdleCA9IFwiXigtPykoMHwoWzEtOV1bMC05XSopKShcXFxcLlswLTldKyk/JFwiO1xuICAgIHZhciB2ZXJzaW9uID0gJzEuMCc7XG4gICAgdmFyIGNsciA9IGZhbHNlO1xuICAgIC8vIEJ5IGxpbmVzXG4gICAgY29uc3QgbGluZXMgPSBkYXRhLnNwbGl0KCdcXG4nKTtcbiAgICBpZiAobGluZXMubGVuZ3RoIDwgMikge1xuICAgICAgZXJyb3JDYWxsYmFjaygpO1xuICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICB9XG4gICAgdmFyIGsgPSAwO1xuICAgIHZhciB1cHRvID0gNDtcbiAgICBpZiAobGluZXMubGVuZ3RoIDwgNCkge1xuICAgICAgdXB0byA9IGxpbmVzLmxlbmd0aDtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cHRvOyBpKyspIHtcbiAgICAgIGlmIChsaW5lc1tpXS5zdWJzdHJpbmcoMCwgNykgPT0gJ3ZlcnNpb24nKSB7XG4gICAgICAgIGsrKztcbiAgICAgICAgY29uc3QgbWV0YUxpbmVzID0gbGluZXNbaV0uc3BsaXQoJ1xcdCcpO1xuICAgICAgICBpZiAobWV0YUxpbmVzWzFdICYmIG1ldGFMaW5lc1sxXS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdmVyc2lvbiA9IG1ldGFMaW5lc1sxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlRGVzY3JpcHRpb24gPSBmaWxlRDtcbiAgICAgICAgICBmaWxlVGl0bGUgPSBmaWxlTjtcbiAgICAgICAgICB2ZXJzaW9uID0gXCIxLjBcIjtcbiAgICAgICAgICBjb2xvck1hcCA9IGNvbG9ybTtcbiAgICAgICAgICBlcnJvckNhbGxiYWNrKCk7XG4gICAgICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxpbmVzW2ldLnN1YnN0cmluZygwLCA0KSA9PSAnbmFtZScpIHtcbiAgICAgICAgaysrO1xuICAgICAgICBjb25zdCBtZXRhTGluZXMgPSBsaW5lc1tpXS5zcGxpdCgnXFx0Jyk7XG4gICAgICAgIGlmIChtZXRhTGluZXNbMV0gJiYgbWV0YUxpbmVzWzFdLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBmaWxlVGl0bGVbZmlsZU5hbWVdID0gbWV0YUxpbmVzWzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVUaXRsZSA9IGZpbGVOO1xuICAgICAgICAgIGZpbGVEZXNjcmlwdGlvbiA9IGZpbGVEO1xuICAgICAgICAgIHZlcnNpb24gPSBcIjEuMFwiO1xuICAgICAgICAgIGNvbG9yTWFwID0gY29sb3JtO1xuICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm4gXCJFcnJvclwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobGluZXNbaV0uc3Vic3RyaW5nKDAsIDExKSA9PSAnZGVzY3JpcHRpb24nKSB7XG4gICAgICAgIGsrKztcbiAgICAgICAgY29uc3QgbWV0YUxpbmVzID0gbGluZXNbaV0uc3BsaXQoJ1xcdCcpO1xuICAgICAgICBpZiAobWV0YUxpbmVzWzFdICYmIG1ldGFMaW5lc1sxXS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgZmlsZURlc2NyaXB0aW9uW2ZpbGVOYW1lXSA9IG1ldGFMaW5lc1sxXTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbGVUaXRsZSA9IGZpbGVOO1xuICAgICAgICAgIGZpbGVEZXNjcmlwdGlvbiA9IGZpbGVEO1xuICAgICAgICAgIHZlcnNpb24gPSBcIjEuMFwiO1xuICAgICAgICAgIGNvbG9yTWFwID0gY29sb3JtO1xuICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm4gXCJFcnJvclwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobGluZXNbaV0uc3Vic3RyaW5nKDAsIDUpID09ICdjb2xvcicpIHtcbiAgICAgICAgY2xyID0gdHJ1ZTtcbiAgICAgICAgaysrO1xuICAgICAgICBjb25zdCBtZXRhTGluZXMgPSBsaW5lc1tpXS5zcGxpdCgnXFx0Jyk7XG4gICAgICAgIGlmIChtZXRhTGluZXMubGVuZ3RoIDw9IDEgJiYgbWV0YUxpbmVzLmxlbmd0aCAlIDIgPT0gMCkge1xuICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm4gXCJFcnJvclwiO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgdCA9IDE7IHQgPCBtZXRhTGluZXMubGVuZ3RoIC0gMTsgdCA9IHQgKyAyKSB7XG4gICAgICAgICAgdmFyIGhleCA9IG1ldGFMaW5lc1t0ICsgMV07XG4gICAgICAgICAgaWYgKHQgPT0gbWV0YUxpbmVzLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAgIGhleCA9IGhleC50cmltKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChtZXRhTGluZXNbdF0gPT0gXCJtaW5cIiB8fCBtZXRhTGluZXNbdF0gPT0gXCJtYXhcIikge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNIZXgoaGV4KSkge1xuICAgICAgICAgICAgICBjb2xvcnNbKG1ldGFMaW5lc1t0XSldID0gdGhpcy5oZXhUb1JnYihoZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQobWV0YUxpbmVzW3RdKSAhPSBOYU4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSGV4KGhleCkpIHtcbiAgICAgICAgICAgICAgY29sb3JzW3BhcnNlSW50KG1ldGFMaW5lc1t0XSldID0gdGhpcy5oZXhUb1JnYihoZXgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmlsZVRpdGxlID0gZmlsZU47XG4gICAgICAgICAgICAgIGZpbGVEZXNjcmlwdGlvbiA9IGZpbGVEO1xuICAgICAgICAgICAgICBjb2xvck1hcCA9IGNvbG9ybTtcbiAgICAgICAgICAgICAgdmVyc2lvbiA9IFwiMS4wXCI7XG4gICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsZVRpdGxlID0gZmlsZU47XG4gICAgICAgICAgICBmaWxlRGVzY3JpcHRpb24gPSBmaWxlRDtcbiAgICAgICAgICAgIGNvbG9yTWFwID0gY29sb3JtO1xuICAgICAgICAgICAgdmVyc2lvbiA9IFwiMS4wXCI7XG4gICAgICAgICAgICBlcnJvckNhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvclwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vZGVmYXVsdCBjb2xvcnNcbiAgICBpZiAoIWNscikge1xuICAgICAgY29sb3JzWy0xMDBdID0gdGhpcy5oZXhUb1JnYignIzAwMDBmZicpO1xuICAgICAgY29sb3JzWzEwMF0gPSB0aGlzLmhleFRvUmdiKCcjZmYwMDAwJyk7XG4gICAgICBjb2xvcnNbMF0gPSB0aGlzLmhleFRvUmdiKCcjZmZmZmZmJyk7XG4gICAgfVxuXG4gICAgLy8gRmlyc3QgbGluZSBpcyBtZXRhIGRhdGEgIVxuICAgIGNvbnN0IG1ldGFMaW5lQ29sdW1ucyA9IGxpbmVzW2tdLnNwbGl0KCdcXHQnKTtcblxuICAgIC8vIFBhcnNlIGV4cGVyaW1lbnQgdHlwZXNcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG1ldGFMaW5lQ29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgPT0gbWV0YUxpbmVDb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdmFyIHRyaW1tZWQgPSBtZXRhTGluZUNvbHVtbnNbaV0udHJpbSgpO1xuICAgICAgICBleHBlcmltZW50cy5wdXNoKHRyaW1tZWQpO1xuICAgICAgfSBlbHNlXG4gICAgICAgIGV4cGVyaW1lbnRzLnB1c2gobWV0YUxpbmVDb2x1bW5zW2ldKTtcblxuICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cGVyaW1lbnRzW2kgLSAxXV0gPSB0cnVlO1xuXG4gICAgICBpZiAoZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdID0gW107XG4gICAgICB9XG4gICAgICBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0ucHVzaChleHBlcmltZW50c1tpIC0gMV0pO1xuICAgIH1cblxuICAgIHZpc2libGVGaWxlc1tmaWxlTmFtZV0gPSB0cnVlO1xuXG4gICAgdmFyIG1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgdmFyIG1heCA9IE51bWJlci5NSU5fVkFMVUU7XG5cbiAgICAvLyBwYXJzZSBnZW5vbWljIGRhdGFcbiAgICBmb3IgKGxldCBpID0gayArIDE7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRU9GIGNoZWNrXG4gICAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICAvLyBTcGxpdCBlYWNoIGxpbmUgYnkgdGFiIGFuZCBwYXJzZSBnZW5vbWljIGRhdGEgY29udGVudFxuICAgICAgY29uc3QgbGluZUNvbnRlbnQgPSBsaW5lc1tpXS5zcGxpdCgnXFx0Jyk7XG4gICAgICBjb25zdCBlbGVTeW1ib2wgPSBsaW5lQ29udGVudFswXTtcblxuICAgICAgLy8gSWYgY3VycmVudCBnZW5lIGVudHJ5IGlzIG5vdCAgaW4gZ2Vub21pYyBkYXRhIG1hcCBjcmVhdGUgbmV3IG1hcFxuICAgICAgaWYgKCEoZWxlU3ltYm9sIGluIHBhcnNlZERhdGFNYXApKSB7XG4gICAgICAgIHBhcnNlZERhdGFNYXBbZWxlU3ltYm9sXSA9IHt9O1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZWFjaCBlbnRyeSBvZiBnZW5vbWljIGRhdGFcbiAgICAgIGZvciAobGV0IGogPSAxOyBqIDwgbGluZUNvbnRlbnQubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKGogPT0gbGluZUNvbnRlbnQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIGxpbmVDb250ZW50W2pdID0gbGluZUNvbnRlbnRbal0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lQ29udGVudFtqXS5tYXRjaChpbnRyZWdleCkpIHtcbiAgICAgICAgICBwYXJzZWREYXRhTWFwW2VsZVN5bWJvbF1bZmlsZU5hbWUgKyAnPycgKyBleHBlcmltZW50c1tqIC0gMV1dID0gbGluZUNvbnRlbnRbal07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VkRGF0YU1hcCA9IHBhcnNlZDtcbiAgICAgICAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwID0gdmlzaWJsZTtcbiAgICAgICAgICBncm91cGVkRGF0YU1hcCA9IGdyb3VwZWQ7XG4gICAgICAgICAgY29sb3JNYXAgPSBjb2xvcm07XG4gICAgICAgICAgdmlzaWJsZUZpbGVzID0gdmlzaWJsZWY7XG4gICAgICAgICAgZmlsZVRpdGxlID0gZmlsZU47XG4gICAgICAgICAgZmlsZURlc2NyaXB0aW9uID0gZmlsZUQ7XG4gICAgICAgICAgdmVyc2lvbiA9IFwiMS4wXCI7XG4gICAgICAgICAgZXJyb3JDYWxsYmFjaygpO1xuICAgICAgICAgIHJldHVybiBcIkVycm9yXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmVDb250ZW50W2pdID4gbWF4KSB7XG4gICAgICAgICAgbWF4ID0gbGluZUNvbnRlbnRbal07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbmVDb250ZW50W2pdIDwgbWluKSB7XG4gICAgICAgICAgbWluID0gbGluZUNvbnRlbnRbal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29sb3JzWydtaW4nXSkge1xuICAgICAgdmFyIGNvbG9ydmFsdWUgPSBjb2xvcnNbJ21pbiddO1xuICAgICAgZGVsZXRlIGNvbG9yc1snbWluJ107XG4gICAgICBjb2xvcnNbbWluXSA9IGNvbG9ydmFsdWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbG9yc1snbWF4J10pIHtcbiAgICAgIHZhciBjb2xvcnZhbHVlID0gY29sb3JzWydtYXgnXTtcbiAgICAgIGRlbGV0ZSBjb2xvcnNbJ21heCddO1xuICAgICAgY29sb3JzW21heF0gPSBjb2xvcnZhbHVlO1xuICAgIH1cblxuICAgIGNvbG9yTWFwW2ZpbGVOYW1lXSA9IGNvbG9ycztcbiAgICB2YXIgcGFyYW1zID0ge2ZpbGVOYW1lfTtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5nZXRFeHBlcmltZW50YWxEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwOiB2aXNpYmxlRGF0YU1hcEJ5RXhwLFxuICAgICAgdmlzaWJsZUZpbGVzOiB2aXNpYmxlRmlsZXMsXG4gICAgICBmaWxlRGVzY3JpcHRpb246IGZpbGVEZXNjcmlwdGlvbixcbiAgICAgIGFsbFZpczogYWxsVmlzLFxuICAgICAgZmlsZVRpdGxlOiBmaWxlVGl0bGUsXG4gICAgICBwYXJzZWREYXRhTWFwOnBhcnNlZERhdGFNYXBcbiAgICB9O1xuICB9O1xuICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXk7XG59O1xuIiwiLypcbiogRmlsZSBVdGlsaXRpZXM6IFRvIGJlIHVzZWQgb24gcmVhZC93cml0ZSBmaWxlIG9wZXJhdGlvblxuKi9cblxudmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpO1xudmFyIGxpYnMgPSBsaWJVdGlsaXRpZXMuZ2V0TGlicygpO1xudmFyIGpRdWVyeSA9ICQgPSBsaWJzLmpRdWVyeTtcbnZhciBzYXZlQXMgPSBsaWJzLnNhdmVBcztcbnZhciB0ZXh0VXRpbGl0aWVzID0gcmVxdWlyZSgnLi90ZXh0LXV0aWxpdGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAvLyBIZWxwZXIgZnVuY3Rpb25zIFN0YXJ0XG4gLy8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTYyNDU3NjcvY3JlYXRpbmctYS1ibG9iLWZyb20tYS1iYXNlNjQtc3RyaW5nLWluLWphdmFzY3JpcHRcbiBmdW5jdGlvbiBiNjR0b0Jsb2IoYjY0RGF0YSwgY29udGVudFR5cGUsIHNsaWNlU2l6ZSkge1xuICAgY29udGVudFR5cGUgPSBjb250ZW50VHlwZSB8fCAnJztcbiAgIHNsaWNlU2l6ZSA9IHNsaWNlU2l6ZSB8fCA1MTI7XG5cbiAgIHZhciBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYjY0RGF0YSk7XG4gICB2YXIgYnl0ZUFycmF5cyA9IFtdO1xuXG4gICBmb3IgKHZhciBvZmZzZXQgPSAwOyBvZmZzZXQgPCBieXRlQ2hhcmFjdGVycy5sZW5ndGg7IG9mZnNldCArPSBzbGljZVNpemUpIHtcbiAgICAgdmFyIHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xuXG4gICAgIHZhciBieXRlTnVtYmVycyA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xuICAgICB9XG5cbiAgICAgdmFyIGJ5dGVBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcblxuICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcbiAgIH1cblxuICAgdmFyIGJsb2IgPSBuZXcgQmxvYihieXRlQXJyYXlzLCB7dHlwZTogY29udGVudFR5cGV9KTtcbiAgIHJldHVybiBibG9iO1xuIH1cblxuIGZ1bmN0aW9uIGxvYWRUZXh0RG9jKGZ1bGxGaWxlUGF0aCkge1xuICAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkge1xuICAgICB4aHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgfVxuICAgZWxzZSB7XG4gICAgIHhodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKTtcbiAgIH1cbiAgIHhodHRwLm92ZXJyaWRlTWltZVR5cGUoJ2FwcGxpY2F0aW9uL3RleHQnKTtcbiAgIHhodHRwLm9wZW4oXCJHRVRcIiwgZnVsbEZpbGVQYXRoLCBmYWxzZSk7XG4gICB4aHR0cC5zZW5kKCk7XG4gICByZXR1cm4geGh0dHAucmVzcG9uc2VUZXh0O1xuIH1cblxuIGZ1bmN0aW9uIGxvYWRYTUxEb2MoZnVsbEZpbGVQYXRoKSB7XG4gIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHtcbiAgICB4aHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICB9XG4gIGVsc2Uge1xuICAgIHhodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoXCJNaWNyb3NvZnQuWE1MSFRUUFwiKTtcbiAgfVxuICB4aHR0cC5vdmVycmlkZU1pbWVUeXBlKCdhcHBsaWNhdGlvbi94bWwnKTtcbiAgeGh0dHAub3BlbihcIkdFVFwiLCBmdWxsRmlsZVBhdGgsIGZhbHNlKTtcbiAgeGh0dHAuc2VuZCgpO1xuICByZXR1cm4geGh0dHAucmVzcG9uc2VYTUw7XG59XG5cbiAvLyBTaG91bGQgdGhpcyBiZSBleHBvc2VkIG9yIHNob3VsZCB0aGlzIGJlIG1vdmVkIHRvIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHNlY3Rpb24/XG4gZnVuY3Rpb24gdGV4dFRvWG1sT2JqZWN0KHRleHQpIHtcbiAgIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkge1xuICAgICB2YXIgZG9jID0gbmV3IEFjdGl2ZVhPYmplY3QoJ01pY3Jvc29mdC5YTUxET00nKTtcbiAgICAgZG9jLmFzeW5jID0gJ2ZhbHNlJztcbiAgICAgZG9jLmxvYWRYTUwodGV4dCk7XG4gICB9IGVsc2Uge1xuICAgICB2YXIgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuICAgICB2YXIgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZXh0LCAndGV4dC94bWwnKTtcbiAgIH1cbiAgIHJldHVybiBkb2M7XG4gfVxuIC8vIEhlbHBlciBmdW5jdGlvbnMgRW5kXG5cbiB2YXIgc2Jnbm1sVG9Kc29uLCBqc29uVG9TYmdubWwsIGpzb25Ub053dCwgdWlVdGlsaXRpZXMsIHRkVG9Kc29uLFxuICAgICBzaWZUb0pzb24sIGdyYXBoVXRpbGl0aWVzLCBsYXlvdXRUb1RleHQsIG53dFRvSnNvbiwganNvblRvU2lmLHNiZ25tbFRvQ2QsY2RUb1NiZ25tbCxzYmdubWxUb1NibWwsc2JtbFRvU2Jnbm1sO1xuIHZhciB1cGRhdGVHcmFwaDtcbiB2YXIgb3B0aW9ucywgY3k7XG5cbiBmdW5jdGlvbiBmaWxlVXRpbGl0aWVzIChwYXJhbSkge1xuICAgc2Jnbm1sVG9Kc29uID0gcGFyYW0uc2Jnbm1sVG9Kc29uQ29udmVydGVyO1xuICAgbnd0VG9Kc29uID0gcGFyYW0ubnd0VG9Kc29uQ29udmVydGVyO1xuICAganNvblRvU2Jnbm1sID0gcGFyYW0uanNvblRvU2Jnbm1sQ29udmVydGVyO1xuICAganNvblRvTnd0ID0gcGFyYW0uanNvblRvTnd0Q29udmVydGVyO1xuICAganNvblRvU2lmID0gcGFyYW0uanNvblRvU2lmQ29udmVydGVyO1xuICAgdWlVdGlsaXRpZXMgPSBwYXJhbS51aVV0aWxpdGllcztcbiAgIHRkVG9Kc29uID0gcGFyYW0udGRUb0pzb25Db252ZXJ0ZXI7XG4gICBzaWZUb0pzb24gPSBwYXJhbS5zaWZUb0pzb25Db252ZXJ0ZXI7XG4gICBsYXlvdXRUb1RleHQgPSBwYXJhbS5sYXlvdXRUb1RleHQ7XG4gICBncmFwaFV0aWxpdGllcyA9IHBhcmFtLmdyYXBoVXRpbGl0aWVzO1xuICAgdXBkYXRlR3JhcGggPSBncmFwaFV0aWxpdGllcy51cGRhdGVHcmFwaC5iaW5kKGdyYXBoVXRpbGl0aWVzKTtcbiAgIG9wdGlvbnMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXMuZ2V0T3B0aW9ucygpO1xuICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICAgc2Jnbm1sVG9DZCA9IHBhcmFtLnNiZ25tbFRvQ2RDb252ZXJ0ZXI7XG4gICBjZFRvU2Jnbm1sID0gcGFyYW0uY2RUb1NiZ25tbENvbnZlcnRlcjtcbiAgIHNiZ25tbFRvU2JtbCA9IHBhcmFtLnNiZ25tbFRvU2JtbENvbnZlcnRlcjtcbiAgIHNibWxUb1NiZ25tbCA9IHBhcmFtLnNibWxUb1NiZ25tbENvbnZlcnRlcjtcbiB9XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWRYTUxEb2MgPSBsb2FkWE1MRG9jO1xuXG4gZmlsZVV0aWxpdGllcy5zYXZlQXNQbmcgPSBmdW5jdGlvbihmaWxlbmFtZSwgc2NhbGUsIGJnLCBtYXhXaWR0aCwgbWF4SGVpZ2h0KSB7XG4gICBpZihtYXhXaWR0aCB8fCBtYXhIZWlnaHQpIHtcbiAgICAgdmFyIHBuZ0NvbnRlbnQgPSBjeS5wbmcoe1xuICAgICAgIGZ1bGw6IHRydWUsIGJnOiBiZywgXG4gICAgICAgbWF4V2lkdGg6IG1heFdpZHRoLCBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgICB9KTtcbiAgIH1cbiAgIGVsc2Uge1xuICAgICB2YXIgcG5nQ29udGVudCA9IGN5LnBuZyh7XG4gICAgICAgc2NhbGU6IHNjYWxlIHx8IDMsIGZ1bGw6IHRydWUsIGJnOiBiZ1xuICAgICB9KTtcbiAgIH1cblxuICAgLy8gdGhpcyBpcyB0byByZW1vdmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgcG5nQ29udGVudDogZGF0YTppbWcvcG5nO2Jhc2U2NCxcbiAgIHZhciBiNjRkYXRhID0gcG5nQ29udGVudC5zdWJzdHIocG5nQ29udGVudC5pbmRleE9mKFwiLFwiKSArIDEpO1xuXG4gICAvLyBsb3dlciBxdWFsaXR5IHdoZW4gcmVzcG9uc2UgaXMgZW1wdHlcbiAgIGlmKCFiNjRkYXRhIHx8IGI2NGRhdGEgPT09IFwiXCIpe1xuICAgICBwbmdDb250ZW50ID0gY3kucG5nKHttYXhXaWR0aDogMTUwMDAsIG1heEhlaWdodDogMTUwMDAsIGZ1bGw6IHRydWUsIGJnOiBiZ30pO1xuICAgICBiNjRkYXRhID0gcG5nQ29udGVudC5zdWJzdHIocG5nQ29udGVudC5pbmRleE9mKFwiLFwiKSArIDEpO1xuICAgfVxuXG4gICBzYXZlQXMoYjY0dG9CbG9iKGI2NGRhdGEsIFwiaW1hZ2UvcG5nXCIpLCBmaWxlbmFtZSB8fCBcIm5ldHdvcmsucG5nXCIpO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLnNhdmVBc0pwZyA9IGZ1bmN0aW9uKGZpbGVuYW1lLCBzY2FsZSwgYmcsIG1heFdpZHRoLCBtYXhIZWlnaHQsIHF1YWxpdHkpIHtcbiAgIGlmKG1heFdpZHRoIHx8IG1heEhlaWdodCkge1xuICAgICB2YXIganBnQ29udGVudCA9IGN5LmpwZyh7XG4gICAgICAgZnVsbDogdHJ1ZSwgYmc6IGJnLCBcbiAgICAgICBtYXhXaWR0aDogbWF4V2lkdGgsIG1heEhlaWdodDogbWF4SGVpZ2h0LCBcbiAgICAgICBxdWFsaXR5OiBxdWFsaXR5XG4gICAgIH0pO1xuICAgfVxuICAgZWxzZSB7XG4gICAgIHZhciBqcGdDb250ZW50ID0gY3kuanBnKHtcbiAgICAgICBzY2FsZTogc2NhbGUgfHwgMywgZnVsbDogdHJ1ZSwgYmc6IGJnLCBcbiAgICAgICBxdWFsaXR5OiBxdWFsaXR5XG4gICAgIH0pO1xuICAgfVxuICAgXG4gICAvLyB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwbmdDb250ZW50OiBkYXRhOmltZy9wbmc7YmFzZTY0LFxuICAgdmFyIGI2NGRhdGEgPSBqcGdDb250ZW50LnN1YnN0cihqcGdDb250ZW50LmluZGV4T2YoXCIsXCIpICsgMSk7XG5cbiAgIC8vIGxvd2VyIHF1YWxpdHkgd2hlbiByZXNwb25zZSBpcyBlbXB0eVxuICAgaWYoIWI2NGRhdGEgfHwgYjY0ZGF0YSA9PT0gXCJcIil7XG4gICAgIGpwZ0NvbnRlbnQgPSBjeS5qcGcoe21heFdpZHRoOiAxNTAwMCwgbWF4SGVpZ2h0OiAxNTAwMCwgZnVsbDogdHJ1ZSwgYmc6IGJnfSk7XG4gICAgIGI2NGRhdGEgPSBqcGdDb250ZW50LnN1YnN0cihqcGdDb250ZW50LmluZGV4T2YoXCIsXCIpICsgMSk7XG4gICB9XG5cbiAgIHNhdmVBcyhiNjR0b0Jsb2IoYjY0ZGF0YSwgXCJpbWFnZS9qcGdcIiksIGZpbGVuYW1lIHx8IFwibmV0d29yay5qcGdcIik7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMuc2F2ZUFzU3ZnID0gZnVuY3Rpb24oZmlsZW5hbWUsIHNjYWxlLCBiZywgbWF4V2lkdGgsIG1heEhlaWdodCkge1xuICAgaWYgKG1heFdpZHRoIHx8IG1heEhlaWdodCkge1xuICAgICB2YXIgc3ZnQ29udGVudCA9IGN5LnN2Zyh7XG4gICAgICAgZnVsbDogdHJ1ZSwgYmc6IGJnLCBcbiAgICAgICBtYXhXaWR0aDogbWF4V2lkdGgsIG1heEhlaWdodDogbWF4SGVpZ2h0XG4gICAgIH0pO1xuICAgfVxuICAgZWxzZSB7XG4gICAgIHZhciBzdmdDb250ZW50ID0gY3kuc3ZnKHtzY2FsZTogc2NhbGUgfHwgMSwgZnVsbDogdHJ1ZSwgYmc6IGJnfSk7XG4gICB9XG4gICBzYXZlQXMobmV3IEJsb2IoW3N2Z0NvbnRlbnRdLCB7dHlwZTpcImltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOFwifSksIGZpbGVuYW1lIHx8IFwibmV0d29yay5zdmdcIik7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMubG9hZFNhbXBsZSA9IGZ1bmN0aW9uKGZpbGVuYW1lLCBmb2xkZXJwYXRoLCBjYWxsYmFjaykge1xuICAgdmFyIGZpbGUgPSAoZm9sZGVycGF0aCB8fCAnc2FtcGxlLWFwcC9zYW1wbGVzLycpICsgZmlsZW5hbWU7XG5cbiAgIHVpVXRpbGl0aWVzLnN0YXJ0U3Bpbm5lcihcImxvYWQtc3Bpbm5lclwiKTtcbiAgIC8vIFVzZXJzIG1heSB3YW50IHRvIGRvIGN1c3RvbWl6ZWQgdGhpbmdzIHdoaWxlIGEgc2FtcGxlIGlzIGJlaW5nIGxvYWRlZFxuICAgLy8gVHJpZ2dlciBhbiBldmVudCBmb3IgdGhpcyBwdXJwb3NlIGFuZCBzcGVjaWZ5IHRoZSAnZmlsZW5hbWUnIGFzIGFuIGV2ZW50IHBhcmFtZXRlclxuICAgJChkb2N1bWVudCkudHJpZ2dlciggXCJzYmdudml6TG9hZFNhbXBsZVwiLCBbIGZpbGVuYW1lLCBjeSBdICk7IC8vIEFsaWFzZXMgZm9yIHNiZ252aXpMb2FkU2FtcGxlU3RhcnRcbiAgICQoZG9jdW1lbnQpLnRyaWdnZXIoIFwic2JnbnZpekxvYWRTYW1wbGVTdGFydFwiLCBbIGZpbGVuYW1lLCBjeSBdICk7XG4gICB2YXIgdGV4dCA9IGxvYWRUZXh0RG9jKGZpbGUpO1xuICAgdmFyIG1hdGNoUmVzdWx0ID0gdGV4dC5tYXRjaChcIjxyZW5kZXJJbmZvcm1hdGlvblteXSo8L3JlbmRlckluZm9ybWF0aW9uPlwiKTtcbiAgIGlmKG1hdGNoUmVzdWx0ICE9IG51bGwpe1xuICAgICB2YXIgcmVuZGVySW5mb1N0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgICB2YXIgcmVuZGVySW5mb1N0cmluZ0NvcHkgPSAoJyAnICsgcmVuZGVySW5mb1N0cmluZykuc2xpY2UoMSk7XG4gICAgIGNvbnN0IHJlZ2V4ID0gL1xccyhbXFxTXSspKFtcXHNdKik9L2c7XG4gICAgIHZhciByZXN1bHQ7XG4gICAgIHZhciBtYXRjaGVzID0gW107IFxuICAgICB3aGlsZShyZXN1bHQgPSByZWdleC5leGVjKHJlbmRlckluZm9TdHJpbmcpKSB7XG4gICAgICAgbWF0Y2hlcy5wdXNoKHJlc3VsdFswXSk7XG4gICAgIH07XG4gICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbihtYXRjaCl7XG4gICAgICAgcmVuZGVySW5mb1N0cmluZyA9IHJlbmRlckluZm9TdHJpbmcucmVwbGFjZShtYXRjaCAsIHRleHRVdGlsaXRpZXMuRnJvbUtlYmFiVG9DYW1lbENhc2UobWF0Y2gpKTtcbiAgICAgfSk7ICAgICAgXG4gICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVuZGVySW5mb1N0cmluZ0NvcHksIHJlbmRlckluZm9TdHJpbmcpO1xuICAgIH1cbiAgICAgIHZhciB4bWxPYmplY3QgPSB0ZXh0VG9YbWxPYmplY3QodGV4dCk7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdXBkYXRlR3JhcGgobnd0VG9Kc29uLmNvbnZlcnQoeG1sT2JqZWN0KSk7XG4gICAgICAgIGZpbGVVdGlsaXRpZXMuY29sbGFwc2VNYXJrZWROb2RlcygpO1xuICAgICAgICB1aVV0aWxpdGllcy5lbmRTcGlubmVyKFwibG9hZC1zcGlubmVyXCIpO1xuICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCBcInNiZ252aXpMb2FkU2FtcGxlRW5kXCIsIFsgZmlsZW5hbWUsIGN5IF0gKTsgLy8gVHJpZ2dlciBhbiBldmVudCBzaWduYWxpbmcgdGhhdCBhIHNhbXBsZSBpcyBsb2FkZWRcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgIGNhbGxiYWNrKCk7IH1cbiAgICAgIH0sMCk7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMubG9hZFNJRkZpbGUgPSBmdW5jdGlvbihmaWxlLCBsYXlvdXRCeSwgY2FsbGJhY2spIHtcbiAgIHZhciBjb252ZXJ0ID0gZnVuY3Rpb24oIHRleHQgKSB7XG4gICAgIHJldHVybiBzaWZUb0pzb24uY29udmVydCh0ZXh0KTtcbiAgIH07XG5cbiAgIHZhciBydW5MYXlvdXQgPSBmdW5jdGlvbigpIHtcbiAgICAgaWYgKCBsYXlvdXRCeSApIHtcbiAgICAgICBpZiAoIHR5cGVvZiBsYXlvdXRCeSA9PT0gJ2Z1bmN0aW9uJyApIHtcbiAgICAgICAgIGxheW91dEJ5KCk7XG4gICAgICAgfVxuICAgICAgIGVsc2Uge1xuICAgICAgICAgdmFyIGxheW91dCA9IGN5LmxheW91dCggbGF5b3V0QnkgKTtcblxuICAgICAgICAgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgbmVlZCB0byBtYWtlIHRoaXMgaWYgY2hlY2tcbiAgICAgICAgIGlmICggbGF5b3V0ICYmIGxheW91dC5ydW4gKSB7XG4gICAgICAgICAgIGxheW91dC5ydW4oKTtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cblxuICAgICBjeS5maXQoIGN5LmVsZW1lbnRzKFwiOnZpc2libGVcIiksIDIwICk7XG5cbiAgIH07XG5cbiAgIGZpbGVVdGlsaXRpZXMubG9hZEZpbGUoIGZpbGUsIGNvbnZlcnQsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIHVuZGVmaW5lZCwgcnVuTGF5b3V0ICk7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMubG9hZFRERmlsZSA9IGZ1bmN0aW9uIGZ1bmN0aW9uTmFtZShmaWxlLCBjYWxsYmFjaykge1xuICAgdmFyIGNvbnZlcnQgPSBmdW5jdGlvbiggdGV4dCApIHtcbiAgICAgcmV0dXJuIHRkVG9Kc29uLmNvbnZlcnQodGV4dCk7XG4gICB9O1xuXG4gICBmaWxlVXRpbGl0aWVzLmxvYWRGaWxlKCBmaWxlLCBjb252ZXJ0LCB1bmRlZmluZWQsIGNhbGxiYWNrICk7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMubG9hZFNCR05NTEZpbGUgPSBmdW5jdGlvbihmaWxlLCBjYWxsYmFjazEsIGNhbGxiYWNrMikge1xuICAgdmFyIGNvbnZlcnQgPSBmdW5jdGlvbiggdGV4dCApIHtcbiAgICAgcmV0dXJuIHNiZ25tbFRvSnNvbi5jb252ZXJ0KHRleHRUb1htbE9iamVjdCh0ZXh0KSk7XG4gICB9O1xuXG4gICBmaWxlVXRpbGl0aWVzLmxvYWRGaWxlKCBmaWxlLCBjb252ZXJ0LCBjYWxsYmFjazEsIGNhbGxiYWNrMiwgZmlsZVV0aWxpdGllcy5jb2xsYXBzZU1hcmtlZE5vZGVzICk7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMubG9hZE53dEZpbGUgPSBmdW5jdGlvbihmaWxlLCBjYWxsYmFjazEsIGNhbGxiYWNrMiwgdXJsUGFyYW1zKSB7XG4gICB2YXIgY29udmVydCA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuICAgICByZXR1cm4gbnd0VG9Kc29uLmNvbnZlcnQodGV4dFRvWG1sT2JqZWN0KHRleHQpLCB1cmxQYXJhbXMpO1xuICAgfTtcblxuICAgZmlsZVV0aWxpdGllcy5sb2FkRmlsZSggZmlsZSwgY29udmVydCwgY2FsbGJhY2sxLCBjYWxsYmFjazIsIGZpbGVVdGlsaXRpZXMuY29sbGFwc2VNYXJrZWROb2RlcyApO1xuIH07XG5cbiAvLyBjb2xsYXBzZSB0aGUgbm9kZXMgd2hvc2UgY29sbGFwc2UgZGF0YSBmaWVsZCBpcyBzZXRcbiBmaWxlVXRpbGl0aWVzLmNvbGxhcHNlTWFya2VkTm9kZXMgPSBmdW5jdGlvbigpIHtcbiAgIC8vIGNvbGxhcHNlIG5vZGVzXG4gICB2YXIgbm9kZXNUb0NvbGxhcHNlID0gY3kubm9kZXMoXCJbY29sbGFwc2VdXCIpO1xuICAgaWYgKG5vZGVzVG9Db2xsYXBzZS5sZW5ndGggPiAwICl7XG4gICAgIGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKS5jb2xsYXBzZShub2Rlc1RvQ29sbGFwc2UsIHtsYXlvdXRCeTogbnVsbH0pO1xuXG4gICAgIG5vZGVzVG9Db2xsYXBzZS5mb3JFYWNoKGZ1bmN0aW9uKGVsZSwgaSwgZWxlcyl7XG4gICAgICAgZWxlLnBvc2l0aW9uKGVsZS5kYXRhKFwicG9zaXRpb25CZWZvcmVTYXZpbmdcIikpO1xuICAgICB9KTtcbiAgICAgbm9kZXNUb0NvbGxhcHNlLnJlbW92ZURhdGEoXCJwb3NpdGlvbkJlZm9yZVNhdmluZ1wiKTtcbiAgIH1cbiB9O1xuXG4gLypcbiAgIGNhbGxiYWNrIGlzIGEgZnVuY3Rpb24gcmVtb3RlbHkgZGVmaW5lZCB0byBhZGQgc3BlY2lmaWMgYmVoYXZpb3IgdGhhdCBpc24ndCBpbXBsZW1lbnRlZCBoZXJlLlxuICAgaXQgaXMgY29tcGxldGVseSBvcHRpb25hbC5cbiAgIHNpZ25hdHVyZTogY2FsbGJhY2sodGV4dFhtbClcbiAqL1xuIGZpbGVVdGlsaXRpZXMubG9hZEZpbGUgPSBmdW5jdGlvbihmaWxlLCBjb252ZXJ0RmNuLCBjYWxsYmFjazEsIGNhbGxiYWNrMiwgY2FsbGJhY2szLCBjYWxsYmFjazQpIHtcbiAgIHZhciBzZWxmID0gdGhpcztcbiAgIHVpVXRpbGl0aWVzLnN0YXJ0U3Bpbm5lcihcImxvYWQtZmlsZS1zcGlubmVyXCIpO1xuXG4gICB2YXIgdGV4dFR5cGUgPSAvdGV4dC4qLztcblxuICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xuICAgICB2YXIgdGV4dCA9IHRoaXMucmVzdWx0O1xuICAgIHZhciBtYXRjaFJlc3VsdCA9IHRleHQubWF0Y2goXCI8cmVuZGVySW5mb3JtYXRpb25bXl0qPC9yZW5kZXJJbmZvcm1hdGlvbj5cIik7XG4gICAgaWYobWF0Y2hSZXN1bHQgIT0gbnVsbCl7XG4gICAgdmFyIGltYWdlc0VsZW1lbnRNYXRjaCA9IHRleHQubWF0Y2goXCI8bGlzdE9mQmFja2dyb3VuZEltYWdlc1teXSo8L2xpc3RPZkJhY2tncm91bmRJbWFnZXM+XCIpO1xuICAgIHZhciBpbWFnZXNFbGVtZW50O1xuICAgIGlmKGltYWdlc0VsZW1lbnRNYXRjaCAhPSBudWxsKXtcbiAgICAgIGltYWdlc0VsZW1lbnQgPSBpbWFnZXNFbGVtZW50TWF0Y2hbMF07XG4gICAgfVxuICAgIHZhciByZW5kZXJJbmZvU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgdmFyIHJlbmRlckluZm9TdHJpbmdDb3B5ID0gKCcgJyArIHJlbmRlckluZm9TdHJpbmcpLnNsaWNlKDEpO1xuICAgICAgY29uc3QgcmVnZXggPSAvXFxzKFtcXFNdKykoW1xcc10qKT0vZztcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB2YXIgbWF0Y2hlcyA9IFtdOyBcbiAgICAgIHdoaWxlKHJlc3VsdCA9IHJlZ2V4LmV4ZWMocmVuZGVySW5mb1N0cmluZykpIHtcbiAgICAgICAgbWF0Y2hlcy5wdXNoKHJlc3VsdFswXSk7XG4gICAgICB9O1xuICAgICAgbWF0Y2hlcy5mb3JFYWNoKGZ1bmN0aW9uKG1hdGNoKXtcbiAgICAgICAgcmVuZGVySW5mb1N0cmluZyA9IHJlbmRlckluZm9TdHJpbmcucmVwbGFjZShtYXRjaCAsIHRleHRVdGlsaXRpZXMuRnJvbUtlYmFiVG9DYW1lbENhc2UobWF0Y2gpKTtcbiAgICAgIH0pOyAgICAgIFxuICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShyZW5kZXJJbmZvU3RyaW5nQ29weSwgcmVuZGVySW5mb1N0cmluZyk7XG4gICAgICB2YXIgaW1hZ2VzRWxlbWVudE1hdGNoRGlydHkgPSB0ZXh0Lm1hdGNoKFwiPGxpc3RPZkJhY2tncm91bmRJbWFnZXNbXl0qPC9saXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzPlwiKTtcbiAgICAgIGlmKGltYWdlc0VsZW1lbnRNYXRjaERpcnR5ICE9IG51bGwpe1xuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKGltYWdlc0VsZW1lbnRNYXRjaERpcnR5WzBdLGltYWdlc0VsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblxuICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sxICE9PSAndW5kZWZpbmVkJykgY2FsbGJhY2sxKHRleHQpO1xuXG4gICAgICAgdmFyIGN5R3JhcGg7XG4gICAgICAgdHJ5IHtcbiAgICAgICAgIGN5R3JhcGggPSBjb252ZXJ0RmNuKCB0ZXh0ICk7XG4gICAgICAgICAvLyBVc2VycyBtYXkgd2FudCB0byBkbyBjdXN0b21pemVkIHRoaW5ncyB3aGlsZSBhbiBleHRlcm5hbCBmaWxlIGlzIGJlaW5nIGxvYWRlZFxuICAgICAgICAgLy8gVHJpZ2dlciBhbiBldmVudCBmb3IgdGhpcyBwdXJwb3NlIGFuZCBzcGVjaWZ5IHRoZSAnZmlsZW5hbWUnIGFzIGFuIGV2ZW50IHBhcmFtZXRlclxuICAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlciggXCJzYmdudml6TG9hZEZpbGVcIiwgWyBmaWxlLm5hbWUsIGN5IF0gKTsgLy8gQWxpYXNlcyBmb3Igc2JnbnZpekxvYWRGaWxlU3RhcnRcbiAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoIFwic2JnbnZpekxvYWRGaWxlU3RhcnRcIiwgWyBmaWxlLm5hbWUsIGN5IF0gKTtcbiAgICAgICB9XG4gICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgdWlVdGlsaXRpZXMuZW5kU3Bpbm5lcihcImxvYWQtZmlsZS1zcGlubmVyXCIpO1xuICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2syICE9PSAndW5kZWZpbmVkJykgY2FsbGJhY2syKCk7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuXG4gICAgICAgdXBkYXRlR3JhcGgoY3lHcmFwaCk7XG5cbiAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrMyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgIGNhbGxiYWNrMygpO1xuICAgICAgIH1cblxuICAgICAgIHVpVXRpbGl0aWVzLmVuZFNwaW5uZXIoXCJsb2FkLWZpbGUtc3Bpbm5lclwiKTtcbiAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCBcInNiZ252aXpMb2FkRmlsZUVuZFwiLCBbIGZpbGUubmFtZSwgY3kgXSApOyAvLyBUcmlnZ2VyIGFuIGV2ZW50IHNpZ25hbGluZyB0aGF0IGEgZmlsZSBpcyBsb2FkZWRcblxuICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2s0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgY2FsbGJhY2s0KCk7XG4gICAgICAgfVxuICAgICB9LCAwKTtcbiAgIH07XG5cbiAgIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWRTQkdOTUxUZXh0ID0gZnVuY3Rpb24odGV4dERhdGEsIHRpbGVJbmZvQm94ZXMsIGZpbGVuYW1lLCBjeSwgdXJsUGFyYW1zKXtcbiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICB1cGRhdGVHcmFwaChzYmdubWxUb0pzb24uY29udmVydCh0ZXh0VG9YbWxPYmplY3QodGV4dERhdGEpLCB1cmxQYXJhbXMpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdGlsZUluZm9Cb3hlcyk7XG4gICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKFwic2JnbnZpekxvYWRGaWxlRW5kXCIsICBbZmlsZW5hbWUsIGN5XSk7XG4gICAgICAgICB1aVV0aWxpdGllcy5lbmRTcGlubmVyKFwibG9hZC1maWxlLXNwaW5uZXJcIik7XG4gICAgIH0sIDApO1xuXG4gfTtcblxuIC8vIHN1cHBvcnRlZCB2ZXJzaW9ucyBhcmUgZWl0aGVyIDAuMiBvciAwLjNcbiBmaWxlVXRpbGl0aWVzLnNhdmVBc1NiZ25tbCA9IGZ1bmN0aW9uKGZpbGVuYW1lLCB2ZXJzaW9uLCByZW5kZXJJbmZvLCBtYXBQcm9wZXJ0aWVzLCBub2RlcywgZWRnZXMpIHtcbiAgIHZhciBzYmdubWxUZXh0ID0ganNvblRvU2Jnbm1sLmNyZWF0ZVNiZ25tbChmaWxlbmFtZSwgdmVyc2lvbiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKTtcbiAgIHZhciBibG9iID0gbmV3IEJsb2IoW3NiZ25tbFRleHRdLCB7XG4gICAgIHR5cGU6IFwidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04O1wiLFxuICAgfSk7XG4gICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpO1xuIH07XG5cbiAvLyBzdXBwb3J0ZWQgdmVyc2lvbnMgYXJlIGVpdGhlciAwLjIgb3IgMC4zXG4gZmlsZVV0aWxpdGllcy5zYXZlQXNOd3QgPSBmdW5jdGlvbihmaWxlbmFtZSwgdmVyc2lvbiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKSB7XG4gICB2YXIgc2Jnbm1sVGV4dCA9IGpzb25Ub053dC5jcmVhdGVOd3QoZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcyk7XG4gICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtzYmdubWxUZXh0XSwge1xuICAgICB0eXBlOiBcInRleHQvcGxhaW47Y2hhcnNldD11dGYtODtcIixcbiAgIH0pO1xuICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lKTtcbiB9O1xuXG4gZmlsZVV0aWxpdGllcy5zYXZlQXNDZWxsRGVzaWduZXIgPSBmdW5jdGlvbihmaWxlbmFtZSwgZXJyb3JDYWxsYmFjayl7XG4gIHVpVXRpbGl0aWVzLnN0YXJ0U3Bpbm5lcihcImxvYWQtc3Bpbm5lclwiKTtcbiAgdmFyIHNiZ25tbCA9IGpzb25Ub1NiZ25tbC5jcmVhdGVTYmdubWwoKTsgXG4gIHRoaXMuY29udmVydFNiZ25tbFRvQ0Qoc2Jnbm1sLCBmdW5jdGlvbihkYXRhKXtcbiAgICBpZihkYXRhID09IG51bGwpe1xuICAgICAgZXJyb3JDYWxsYmFjaygpO1xuICAgIH1lbHNle1xuICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTg7XCIsXG4gICAgICB9KTtcbiAgICAgIHNhdmVBcyhibG9iLCBmaWxlbmFtZSk7IFxuICAgIH1cbiAgICB1aVV0aWxpdGllcy5lbmRTcGlubmVyKFwibG9hZC1zcGlubmVyXCIpO1xuICAgIFxuICB9KTtcbiAgXG5cbiB9XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWRDZWxsRGVzaWduZXIgPSBmdW5jdGlvbihmaWxlLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spe1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHsgXG4gIFxuICAgIHRoaXMuY29udmVydENEVG9TYmdubWwoZS50YXJnZXQucmVzdWx0LCBmdW5jdGlvbihkYXRhKXtcbiAgICAgIHVpVXRpbGl0aWVzLmVuZFNwaW5uZXIoXCJsb2FkLXNwaW5uZXJcIik7XG4gICAgICBpZihkYXRhID09IG51bGwpe1xuICAgICAgICBlcnJvckNhbGxiYWNrKCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LmJpbmQodGhpcyk7XG4gIHVpVXRpbGl0aWVzLnN0YXJ0U3Bpbm5lcihcImxvYWQtc3Bpbm5lclwiKTtcbiAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7XG4gfVxuXG4gZmlsZVV0aWxpdGllcy5zYXZlQXNTYm1sID0gZnVuY3Rpb24oZmlsZW5hbWUsZXJyb3JDYWxsYmFjayl7XG4gIHVpVXRpbGl0aWVzLnN0YXJ0U3Bpbm5lcihcImxvYWQtc3Bpbm5lclwiKTtcbiAgdmFyIHNiZ25tbCA9IHRoaXMuY29udmVydFNiZ24oKTtcbiAgXG4gIHRoaXMuY29udmVydFNiZ25tbFRvU2JtbChzYmdubWwsIGZ1bmN0aW9uKGRhdGEpe1xuICAgIFxuICAgIGlmKCFkYXRhLnJlc3VsdCl7XG4gICAgICBlcnJvckNhbGxiYWNrKHNiZ25tbCxkYXRhLmVycm9yKTtcbiAgICB9ZWxzZSBpZiggZGF0YS5tZXNzYWdlLmluZGV4T2YoXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIikgIT09IC0xKVxuICAgIHtcbiAgICAgIGVycm9yQ2FsbGJhY2soc2Jnbm1sLGRhdGEubWVzc2FnZSk7XG4gICAgfWVsc2V7ICAgIFxuICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbZGF0YS5tZXNzYWdlXSwge1xuICAgICAgICB0eXBlOiBcInRleHQvcGxhaW47Y2hhcnNldD11dGYtODtcIixcbiAgICAgIH0pO1xuICAgICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lKTsgXG4gICAgICBcbiAgICB9XG5cbiAgICB1aVV0aWxpdGllcy5lbmRTcGlubmVyKFwibG9hZC1zcGlubmVyXCIpO1xuICAgIFxuICB9KTtcblxuIH1cblxuIGZpbGVVdGlsaXRpZXMubG9hZFNibWwgPSBmdW5jdGlvbihmaWxlLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spe1xuICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHsgXG4gICAgXG4gICAgdGhpcy5jb252ZXJ0U2JtbFRvU2Jnbm1sKGUudGFyZ2V0LnJlc3VsdCwgZnVuY3Rpb24oZGF0YSl7XG4gICAgICB1aVV0aWxpdGllcy5lbmRTcGlubmVyKFwibG9hZC1zcGlubmVyXCIpO1xuICAgICAgaWYoZGF0YSA9PSBudWxsKXtcbiAgICAgICAgZXJyb3JDYWxsYmFjaygpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfS5iaW5kKHRoaXMpO1xuICB1aVV0aWxpdGllcy5zdGFydFNwaW5uZXIoXCJsb2FkLXNwaW5uZXJcIik7XG4gIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuXG4gfVxuXG5cbiBmaWxlVXRpbGl0aWVzLmNvbnZlcnRTYmduPSBmdW5jdGlvbihmaWxlbmFtZSwgdmVyc2lvbiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKSB7XG4gIHZhciBzYmdubWxUZXh0ID0ganNvblRvU2Jnbm1sLmNyZWF0ZVNiZ25tbChmaWxlbmFtZSwgXCJwbGFpblwiLCByZW5kZXJJbmZvLCBtYXBQcm9wZXJ0aWVzLCBub2RlcywgZWRnZXMpO1xuIFxuICByZXR1cm4gc2Jnbm1sVGV4dDtcbn07XG5cbiBmaWxlVXRpbGl0aWVzLmV4cG9ydExheW91dERhdGEgPSBmdW5jdGlvbihmaWxlbmFtZSwgYnlOYW1lKSB7XG4gICB2YXIgbGF5b3V0VGV4dCA9IGxheW91dFRvVGV4dC5jb252ZXJ0KCBieU5hbWUgKTtcblxuICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbbGF5b3V0VGV4dF0sIHtcbiAgICAgdHlwZTogXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTg7XCIsXG4gICB9KTtcbiAgIHNhdmVBcyhibG9iLCBmaWxlbmFtZSk7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMuc2F2ZUFzUGxhaW5TaWYgPSBmdW5jdGlvbihmaWxlbmFtZSkge1xuICAgdmFyIHRleHQgPSBqc29uVG9TaWYuY29udmVydCgpO1xuXG4gICB2YXIgYmxvYiA9IG5ldyBCbG9iKFt0ZXh0XSwge1xuICAgICB0eXBlOiBcInRleHQvcGxhaW47Y2hhcnNldD11dGYtODtcIixcbiAgIH0pO1xuICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lKTtcbiB9O1xuXG4gZmlsZVV0aWxpdGllcy5jb252ZXJ0U2Jnbm1sVGV4dFRvSnNvbiA9IGZ1bmN0aW9uKHNiZ25tbFRleHQpe1xuICAgICByZXR1cm4gc2Jnbm1sVG9Kc29uLmNvbnZlcnQodGV4dFRvWG1sT2JqZWN0KHNiZ25tbFRleHQpKTtcbiB9O1xuXG4gZmlsZVV0aWxpdGllcy5jb252ZXJ0U2lmVGV4dFRvSnNvbiA9IGZ1bmN0aW9uKHNpZlRleHQpe1xuICAgICAgICByZXR1cm4gc2lmVG9Kc29uLmNvbnZlcnQoc2lmVGV4dCk7XG4gfTtcbiBcbmZpbGVVdGlsaXRpZXMuY3JlYXRlSnNvbkZyb21TQkdOID0gZnVuY3Rpb24oKXtcblxuXG4gICAgdmFyIHNiZ25tbFRleHQgPSBqc29uVG9TYmdubWwuY3JlYXRlU2Jnbm1sKCk7XG4gICAgcmV0dXJuIHNiZ25tbFRvSnNvbi5jb252ZXJ0KHRleHRUb1htbE9iamVjdChzYmdubWxUZXh0KSk7XG59O1xuXG5maWxlVXRpbGl0aWVzLmNyZWF0ZUpzb25Gcm9tU2lmID0gZnVuY3Rpb24oKXtcblxuICAgIHZhciBzaWZUZXh0ID0ganNvblRvU2lmLmNvbnZlcnQoKTtcbiAgICByZXR1cm4gc2lmVG9Kc29uLmNvbnZlcnQoc2lmVGV4dCk7XG4gICAgXG59O1xuXG5maWxlVXRpbGl0aWVzLmNvbnZlcnRTYmdubWxUb0NEID0gZnVuY3Rpb24oc2Jnbm1sLCBjYWxsYmFjayl7XG4gICBcbiAgcmV0dXJuIHNiZ25tbFRvQ2QuY29udmVydChzYmdubWwsY2FsbGJhY2spO1xufTtcblxuZmlsZVV0aWxpdGllcy5jb252ZXJ0U2Jnbm1sVG9TYm1sID0gZnVuY3Rpb24oc2Jnbm1sLCBjYWxsYmFjayl7XG4gICBcbiAgcmV0dXJuIHNiZ25tbFRvU2JtbC5jb252ZXJ0KHNiZ25tbCxjYWxsYmFjayk7XG59O1xuXG5maWxlVXRpbGl0aWVzLmNvbnZlcnRTYm1sVG9TYmdubWwgPSBmdW5jdGlvbihzYm1sLCBjYWxsYmFjayl7XG4gIHJldHVybiBzYm1sVG9TYmdubWwuY29udmVydChzYm1sLGNhbGxiYWNrKTtcbn1cbmZpbGVVdGlsaXRpZXMuY29udmVydENEVG9TYmdubWwgPSBmdW5jdGlvbih4bWwsY2FsbGJhY2spe1xuICByZXR1cm4gY2RUb1NiZ25tbC5jb252ZXJ0KHhtbCxjYWxsYmFjayk7XG59XG5cblxuIHJldHVybiBmaWxlVXRpbGl0aWVzO1xufTtcbiIsIi8qXG4gKiBDb21tb24gdXRpbGl0aWVzIGZvciBzYmdudml6IGdyYXBoc1xuICovXG5cbnZhciBjbGFzc2VzID0gcmVxdWlyZSgnLi9jbGFzc2VzJyk7XG52YXIgbGliVXRpbGl0aWVzID0gcmVxdWlyZSgnLi9saWItdXRpbGl0aWVzJyk7XG52YXIgbGlicyA9IGxpYlV0aWxpdGllcy5nZXRMaWJzKCk7XG52YXIgalF1ZXJ5ID0gJCA9IGxpYnMualF1ZXJ5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIG9wdGlvblV0aWxpdGllcztcbiAgdmFyIG9wdGlvbnMsIGN5O1xuXG4gIGZ1bmN0aW9uIGdyYXBoVXRpbGl0aWVzIChwYXJhbSkge1xuICAgIG9wdGlvblV0aWxpdGllcyA9IHBhcmFtLm9wdGlvblV0aWxpdGllcztcbiAgICBvcHRpb25zID0gb3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7ICAgIFxuICB9XG5cbiAgLy8gVE9ETyBtYWtlIHRoZXNlIGluaXRpYWwgdmFsdWVzIHVzZXIgb3B0aW9ucyBpbnN0ZWFkIG9mIGhhcmRjb2RpbmcgdGhlbSBoZXJlXG4gIGdyYXBoVXRpbGl0aWVzLnBvcnRzRW5hYmxlZCA9IHRydWU7XG4gIGdyYXBoVXRpbGl0aWVzLmNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkID0gdHJ1ZTtcblxuICBncmFwaFV0aWxpdGllcy5kaXNhYmxlUG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgICBncmFwaFV0aWxpdGllcy5wb3J0c0VuYWJsZWQgPSBmYWxzZTtcbiAgICBcbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIGdyYXBoVXRpbGl0aWVzLmVuYWJsZVBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgZ3JhcGhVdGlsaXRpZXMucG9ydHNFbmFibGVkID0gdHJ1ZTtcbiAgICBcbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIGdyYXBoVXRpbGl0aWVzLmFyZVBvcnRzRW5hYmxlZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBncmFwaFV0aWxpdGllcy5wb3J0c0VuYWJsZWQ7XG4gIH07XG5cbiAgZ3JhcGhVdGlsaXRpZXMuY29uc2lkZXJDb21wb3VuZFNpemVzID0gZnVuY3Rpb24oKSB7XG4gICAgZ3JhcGhVdGlsaXRpZXMuY29tcG91bmRTaXplc0NvbnNpZGVyZWQgPSB0cnVlO1xuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgZ3JhcGhVdGlsaXRpZXMub21pdENvbXBvdW5kU2l6ZXMgPSBmdW5jdGlvbigpIHtcbiAgICBncmFwaFV0aWxpdGllcy5jb21wb3VuZFNpemVzQ29uc2lkZXJlZCA9IGZhbHNlO1xuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgZ3JhcGhVdGlsaXRpZXMuYXJlQ29tcG91bmRTaXplc0NvbnNpZGVyZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZ3JhcGhVdGlsaXRpZXMuY29tcG91bmRTaXplc0NvbnNpZGVyZWQgPT0gdHJ1ZTtcbiAgfTtcblxuICBncmFwaFV0aWxpdGllcy51cGRhdGVHcmFwaCA9IGZ1bmN0aW9uKGN5R3JhcGgsIGNhbGxiYWNrLCBsYXlvdXRPcHRpb25zLCB0aWxlSW5mb0JveGVzKSB7XG4gICBcblxuICAgIHZhciBpc0xheW91dFJlcXVpcmVkO1xuICAgIGlmKGxheW91dE9wdGlvbnMgPT09IHVuZGVmaW5lZCl7XG4gICAgICBpc0xheW91dFJlcXVpcmVkID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICBpc0xheW91dFJlcXVpcmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCBcInVwZGF0ZUdyYXBoU3RhcnRcIiwgY3kgKTtcbiAgICAvLyBSZXNldCB1bmRvL3JlZG8gc3RhY2sgYW5kIGJ1dHRvbnMgd2hlbiBhIG5ldyBncmFwaCBpcyBsb2FkZWRcbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5yZXNldCgpO1xuICAvLyAgICB0aGlzLnJlc2V0VW5kb1JlZG9CdXR0b25zKCk7XG4gICAgfVxuXG4gICAgY3kuc3RhcnRCYXRjaCgpO1xuICAgIC8vIGNsZWFyIGRhdGFcbiAgICBjeS5yZW1vdmUoJyonKTtcbiAgICBjeS5hZGQoY3lHcmFwaCk7XG5cbiAgICAvL2FkZCBwb3NpdGlvbiBpbmZvcm1hdGlvbiB0byBkYXRhIGZvciBwcmVzZXQgbGF5b3V0XG4gICAgdmFyIHBvc2l0aW9uTWFwID0ge307XG4gICAgY3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciB4UG9zID0gbm9kZS5kYXRhKCdiYm94JykueDtcbiAgICAgIHZhciB5UG9zID0gbm9kZS5kYXRhKCdiYm94JykueTtcbiAgICAgIHBvc2l0aW9uTWFwW25vZGUuZGF0YSgnaWQnKV0gPSB7J3gnOiB4UG9zLCAneSc6IHlQb3N9O1xuXG4gICAgICAvLyBhc3NpZ24gY29ycmVjdCBwYXJlbnRzIHRvIGluZm8gYm94ZXNcbiAgICAgIHZhciBzdGF0ZXNhbmRpbmZvcyA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKTtcbiAgICAgIGZvciAodmFyIGo9MDsgaiA8IHN0YXRlc2FuZGluZm9zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNsYXNzZXMuZ2V0QXV4VW5pdENsYXNzKHN0YXRlc2FuZGluZm9zW2pdKS5zZXRQYXJlbnRSZWYoc3RhdGVzYW5kaW5mb3Nbal0sIG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICAvL3RoaXMucmVmcmVzaFBhZGRpbmdzKCk7IC8vIFJlY2FsY3VsYXRlcy9yZWZyZXNoZXMgdGhlIGNvbXBvdW5kIHBhZGRpbmdzXG4gICAgY3kuZW5kQmF0Y2goKTtcblxuICAgIGlmKGlzTGF5b3V0UmVxdWlyZWQpIHtcbiAgICAgIHZhciBwcmVmZXJlbmNlcyA9IHt9O1xuICAgICAgaWYoY3kubm9kZXMoKS5sZW5ndGggPiAzMDAwIHx8IGN5LmVkZ2VzKCkubGVuZ3RoID4gMzAwMCkge1xuICAgICAgICBwcmVmZXJlbmNlcy5xdWFsaXR5ID0gXCJkcmFmdFwiO1xuICAgICAgfVxuICAgICAgcHJlZmVyZW5jZXMuYW5pbWF0ZSA9IGZhbHNlO1xuICAgICAgcHJlZmVyZW5jZXMucmFuZG9taXplID0gdHJ1ZTtcbiAgICAgIHByZWZlcmVuY2VzID0gJC5leHRlbmQoe30sIGxheW91dE9wdGlvbnMsIHByZWZlcmVuY2VzKTtcbiAgICAgIHZhciBsYXlvdXQgPSBjeS5sYXlvdXQocHJlZmVyZW5jZXMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBsYXlvdXQgPSBjeS5sYXlvdXQoe1xuICAgICAgICBuYW1lOiAncHJlc2V0JyxcbiAgICAgICAgcG9zaXRpb25zOiBwb3NpdGlvbk1hcCxcbiAgICAgICAgZml0OiB0cnVlLFxuICAgICAgICBwYWRkaW5nOiAyMFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgdGhpcyBmb3IgY3l0b3NjYXBlLmpzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICBpZiAobGF5b3V0ICYmIGxheW91dC5ydW4pIHtcbiAgICAgIGxheW91dC5ydW4oKTtcbiAgICB9XG5cbiAgICB2YXIgcGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uKCl7XG4gICAgICBjeS5maXQoIGN5LmVsZW1lbnRzKFwiOnZpc2libGVcIiksIDIwIClcbiAgICB9O1xuICAgIC8vIFVwZGF0ZSB0aGUgc3R5bGVcbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICAgIC8vIEluaXRpbGl6ZSB0aGUgYW5jaG9yIHBvaW50cyBvbmNlIHRoZSBlbGVtZW50cyBhcmUgY3JlYXRlZFxuICAgIGlmIChjeS5lZGdlRWRpdGluZyAmJiBjeS5lZGdlRWRpdGluZygnaW5pdGlhbGl6ZWQnKSkge1xuICAgICAgY3kuZWRnZUVkaXRpbmcoJ2dldCcpLmluaXRBbmNob3JQb2ludHMoY3kuZWRnZXMoKSk7XG4gICAgfVxuXG5cblxuICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoIFwidXBkYXRlR3JhcGhFbmRcIiwgW2N5LCAoaXNMYXlvdXRSZXF1aXJlZCB8fCB0aWxlSW5mb0JveGVzKSAsIHBlcmZvcm1MYXlvdXRdKTtcbiAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gIH07XG5cbiAgZ3JhcGhVdGlsaXRpZXMuY2FsY3VsYXRlUGFkZGluZ3MgPSBmdW5jdGlvbihwYWRkaW5nUGVyY2VudCkge1xuICAgIC8vQXMgZGVmYXVsdCB1c2UgdGhlIGNvbXBvdW5kIHBhZGRpbmcgdmFsdWVcbiAgICBpZiAoIXBhZGRpbmdQZXJjZW50KSB7XG4gICAgICB2YXIgY29tcG91bmRQYWRkaW5nID0gb3B0aW9ucy5jb21wb3VuZFBhZGRpbmc7XG4gICAgICBwYWRkaW5nUGVyY2VudCA9IHR5cGVvZiBjb21wb3VuZFBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBjb21wb3VuZFBhZGRpbmcuY2FsbCgpIDogY29tcG91bmRQYWRkaW5nO1xuICAgIH1cblxuICAgIHZhciBub2RlcyA9IGN5Lm5vZGVzKCk7XG4gICAgdmFyIHRvdGFsID0gMDtcbiAgICB2YXIgbnVtT2ZTaW1wbGVzID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdGhlTm9kZSA9IG5vZGVzW2ldO1xuICAgICAgaWYgKHRoZU5vZGUuY2hpbGRyZW4oKSA9PSBudWxsIHx8IHRoZU5vZGUuY2hpbGRyZW4oKS5sZW5ndGggPT0gMCkge1xuICAgICAgICB0b3RhbCArPSBOdW1iZXIodGhlTm9kZS53aWR0aCgpKTtcbiAgICAgICAgdG90YWwgKz0gTnVtYmVyKHRoZU5vZGUuaGVpZ2h0KCkpO1xuICAgICAgICBudW1PZlNpbXBsZXMrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2FsY19wYWRkaW5nID0gKHBhZGRpbmdQZXJjZW50IC8gMTAwKSAqIE1hdGguZmxvb3IodG90YWwgLyAoMiAqIG51bU9mU2ltcGxlcykpO1xuICAgIGlmIChjYWxjX3BhZGRpbmcgPCA1KSB7XG4gICAgICBjYWxjX3BhZGRpbmcgPSA1O1xuICAgIH1cblxuICAgIHJldHVybiBjYWxjX3BhZGRpbmc7XG4gIH07XG5cbiAgZ3JhcGhVdGlsaXRpZXMucmVjYWxjdWxhdGVQYWRkaW5ncyA9IGdyYXBoVXRpbGl0aWVzLnJlZnJlc2hQYWRkaW5ncyA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIHRoaXMuY2FsY3VsYXRlZFBhZGRpbmdzIGlzIG5vdCB3b3JraW5nIGhlcmVcbiAgICAvLyBUT0RPOiByZXBsYWNlIHRoaXMgcmVmZXJlbmNlIHdpdGggdGhpcy5jYWxjdWxhdGVkUGFkZGluZ3Mgb25jZSB0aGUgcmVhc29uIGlzIGZpZ3VyZWQgb3V0XG4gICAgLy9ncmFwaFV0aWxpdGllcy5jYWxjdWxhdGVkUGFkZGluZ3MgPSB0aGlzLmNhbGN1bGF0ZVBhZGRpbmdzKCk7XG4gICAgdmFyIGNvbXBvdW5kUGFkZGluZyA9IG9wdGlvbnMuY29tcG91bmRQYWRkaW5nO1xuICAgIHJldHVybiAoIHR5cGVvZiBjb21wb3VuZFBhZGRpbmcgPT09ICdmdW5jdGlvbicpID8gY29tcG91bmRQYWRkaW5nLmNhbGwoKSA6IGNvbXBvdW5kUGFkZGluZ1xuICAgIC8vcmV0dXJuIGdyYXBoVXRpbGl0aWVzLmNhbGN1bGF0ZWRQYWRkaW5ncztcbiAgfTtcblxuICBncmFwaFV0aWxpdGllcy5nZXRDb21wb3VuZFBhZGRpbmdzID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gUmV0dXJuIGNhbGN1bGF0ZWQgcGFkZGluZ3MgaW4gY2FzZSBvZiB0aGF0IGRhdGEgaXMgaW52YWxpZCByZXR1cm4gNVxuICAgIHZhciBjb21wb3VuZFBhZGRpbmcgPSBvcHRpb25zLmNvbXBvdW5kUGFkZGluZztcbiAgICByZXR1cm4gKCB0eXBlb2YgY29tcG91bmRQYWRkaW5nID09PSAnZnVuY3Rpb24nKSA/IGNvbXBvdW5kUGFkZGluZy5jYWxsKCkgOiBjb21wb3VuZFBhZGRpbmdcblxuICAgIC8vcmV0dXJuIGdyYXBoVXRpbGl0aWVzLmNhbGN1bGF0ZWRQYWRkaW5ncyB8fCA1O1xuICB9O1xuXG4gIHJldHVybiBncmFwaFV0aWxpdGllcztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGpzb25Ub1NiZ25tbCwgZWxlbWVudFV0aWxpdGllcywgY3k7XG5cbiAgZnVuY3Rpb24ganNvblRvTnd0KHBhcmFtKSB7XG4gICAganNvblRvU2Jnbm1sID0gcGFyYW0uanNvblRvU2Jnbm1sQ29udmVydGVyO1xuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFRvU3RyKHNldCkge1xuICAgIGlmIChzZXQpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXQpLmpvaW4oJzsnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBzaWZFZGdlUHJvcEhhbmRsZXJNYXAgPSB7XG4gICAgJ3BjSURzJzogZnVuY3Rpb24oZWRnZSkge1xuICAgICAgcmV0dXJuIHNldFRvU3RyKCBlZGdlLmRhdGEoJ3BjSURTZXQnKSApO1xuICAgIH0sXG4gICAgJ3NpdGVMb2NhdGlvbnMnOiBmdW5jdGlvbihlZGdlKSB7XG4gICAgICByZXR1cm4gc2V0VG9TdHIoIGVkZ2UuZGF0YSgnc2l0ZUxvY1NldCcpICk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBzaWZOb2RlUHJvcEhhbmRsZXJNYXAgPSB7XG4gICAgJ3Rvb2x0aXAnOiBmdW5jdGlvbihub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5kYXRhKCd0b29sdGlwJyk7XG4gICAgfSxcbiAgICAnaW5mb2JveGVzJzogZnVuY3Rpb24obm9kZSwgb2JqKSB7XG4gICAgICB2YXIgc2lmSW5mb2JveFByb3BIYW5kbGVyTWFwID0ge1xuICAgICAgICAndG9vbHRpcCc6IGZ1bmN0aW9uKGluZm9ib3gpIHtcbiAgICAgICAgICByZXR1cm4gaW5mb2JveC50b29sdGlwO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB2YXIgaW5mb2JveGVzID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpO1xuICAgICAgdmFyIGdseXBocyA9IG9iai5nbHlwaDtcbiAgICAgIGluZm9ib3hlcy5mb3JFYWNoKCBmdW5jdGlvbihpbmZvYm94LCBpKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHNpZkluZm9ib3hQcm9wSGFuZGxlck1hcCkuZm9yRWFjaCggZnVuY3Rpb24ocHJvcE5hbWUpIHtcbiAgICAgICAgICB2YXIgdmFsID0gc2lmSW5mb2JveFByb3BIYW5kbGVyTWFwW3Byb3BOYW1lXShpbmZvYm94KTtcbiAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICBnbHlwaHNbaV1bcHJvcE5hbWVdID0gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSApO1xuICAgICAgfSApO1xuICAgIH1cbiAgfTtcblxuICAvLyBvYmplY3RzIGNvbnNpc3Qgb2YgYXJjcyBvciBneWxwaHNcbiAgZnVuY3Rpb24gZXh0ZW5kT2JqZWN0c0RhdGEob2JqcywgZmlsdGVyRmNuLCBwcm9wSGFuZGxlck1hcCkge1xuICAgIGlmICggIW9ianMgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb2Jqcy5mb3JFYWNoKCBmdW5jdGlvbiggb2JqICkge1xuICAgICAgaWYgKCBmaWx0ZXJGY24oIG9iai4kLmNsYXNzICkgKSB7XG4gICAgICAgIHZhciBlbGUgPSBjeS5nZXRFbGVtZW50QnlJZCggb2JqLiQuaWQgKTtcbiAgICAgICAgT2JqZWN0LmtleXMoIHByb3BIYW5kbGVyTWFwICkuZm9yRWFjaCggZnVuY3Rpb24oIHByb3BOYW1lICkge1xuICAgICAgICAgIC8vIGRvZXMgbm90IGhhdmUgdG8gcmV0dXJuIGEgdmFsdWUsIG1heWJlIGEgdm9pZCBmdW5jdGlvbiBhcyB3ZWxsXG4gICAgICAgICAgdmFyIHZhbCA9IHByb3BIYW5kbGVyTWFwWyBwcm9wTmFtZSBdKCBlbGUsIG9iaiApO1xuICAgICAgICAgIGlmICggdmFsICkge1xuICAgICAgICAgICAgb2JqWyBwcm9wTmFtZSBdID0gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSApO1xuICAgICAgfVxuICAgIH0gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4dGVuZFN0eWxlc0RhdGEodG9FeHRlbmQsIGV4dGVuZEZyb20pIHtcbiAgICBpZiAoICF0b0V4dGVuZCB8fCAhZXh0ZW5kRnJvbSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGVOYW1lcyA9IFsgJ3NoYXBlTmFtZScgXTtcbiAgICB2YXIgc3R5bGVNYXAgPSB7fTtcblxuICAgIE9iamVjdC5rZXlzKCBleHRlbmRGcm9tICkuZm9yRWFjaCggZnVuY3Rpb24oIGtleSApIHtcbiAgICAgIHN0eWxlTmFtZXMuZm9yRWFjaCggZnVuY3Rpb24oIG5hbWUgKSB7XG4gICAgICAgIHZhciBlbCA9IGV4dGVuZEZyb21bIGtleSBdO1xuICAgICAgICB2YXIgcHJvcHMgPSBlbCAmJiBlbC5wcm9wZXJ0aWVzO1xuXG4gICAgICAgIGlmICggcHJvcHMgJiYgcHJvcHNbIG5hbWUgXSApIHtcbiAgICAgICAgICB2YXIgdmFsID0gcHJvcHNbIG5hbWUgXTtcbiAgICAgICAgICB2YXIgaWRMaXN0ID0gZWwuaWRMaXN0O1xuXG4gICAgICAgICAgaWRMaXN0LmZvckVhY2goIGZ1bmN0aW9uKCBpZCApIHtcbiAgICAgICAgICAgIHN0eWxlTWFwWyBpZCBdID0gc3R5bGVNYXBbIGlkIF0gfHwge307XG4gICAgICAgICAgICBzdHlsZU1hcFsgaWQgXVsgbmFtZSBdID0gdmFsO1xuICAgICAgICAgIH0gKTtcbiAgICAgICAgfVxuICAgICAgfSApO1xuICAgIH0gKTtcblxuICAgIHRvRXh0ZW5kLmZvckVhY2goIGZ1bmN0aW9uKCBzdHlsZSApIHtcbiAgICAgIHZhciBpZExpc3QgPSBzdHlsZS4kLmlkTGlzdC5zcGxpdCgnICcpO1xuXG4gICAgICBzdHlsZU5hbWVzLmZvckVhY2goIGZ1bmN0aW9uKCBuYW1lICkge1xuICAgICAgICB2YXIgdmFsID0gbnVsbDtcblxuICAgICAgICBpZExpc3QuZm9yRWFjaCggZnVuY3Rpb24oIGlkICkge1xuICAgICAgICAgIHZhciBjdXJyVmFsID0gc3R5bGVNYXBbIGlkIF0gJiYgc3R5bGVNYXBbIGlkIF1bIG5hbWUgXTtcbiAgICAgICAgICBpZiAoIGN1cnJWYWwgPT09IHVuZGVmaW5lZCApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIHZhbCA9PSBudWxsICkge1xuICAgICAgICAgICAgdmFsID0gY3VyclZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAoIHZhbCAhPT0gY3VyclZhbCApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybiggJ1NoYXBlIG5hbWUgb2Ygc29tZSBnbHlwaHMgZGVmaW5lZCBtdWx0aXBsZSB0aW1lcyBpbiByZW5kZXIgaW5mb3JtYXRpb24hJyApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSApO1xuXG4gICAgICAgIGlmICggdmFsICE9PSBudWxsICkge1xuICAgICAgICAgIHN0eWxlLmcuJFsgbmFtZSBdID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9ICk7XG4gICAgfSApO1xuICB9XG5cbiAganNvblRvTnd0LmJ1aWxkSnNPYmogPSBmdW5jdGlvbihmaWxlbmFtZSwgdmVyc2lvbiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKSB7XG4gICAgdmFyIGpzT2JqID0ganNvblRvU2Jnbm1sLmJ1aWxkSnNPYmooZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcyk7XG5cbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSAhPT0gJ1BEJyAmJiBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgIT09ICdBRicgICYmIGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSAhPT0gJ0h5YnJpZFNiZ24nKSB7XG4gICAgICB2YXIgbWFwID0ganNPYmoubWFwWzBdO1xuXG4gICAgICB2YXIgYXJjcyA9IG1hcC5hcmM7XG4gICAgICB2YXIgZ2x5cGhzID0gbWFwLmdseXBoO1xuICAgICAgZXh0ZW5kT2JqZWN0c0RhdGEoYXJjcywgZWxlbWVudFV0aWxpdGllcy5pc1NJRkVkZ2UsIHNpZkVkZ2VQcm9wSGFuZGxlck1hcCk7XG4gICAgICBleHRlbmRPYmplY3RzRGF0YShnbHlwaHMsIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZOb2RlLCBzaWZOb2RlUHJvcEhhbmRsZXJNYXApO1xuXG4gICAgICB2YXIganNPYmpTdHlsZXMgPSAoIG1hcCAmJiBtYXAuZXh0ZW5zaW9uICYmIG1hcC5leHRlbnNpb24ucmVuZGVySW5mb3JtYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtYXAuZXh0ZW5zaW9uLnJlbmRlckluZm9ybWF0aW9uLmxpc3RPZlN0eWxlcyApLnN0eWxlO1xuICAgICAgdmFyIGFwcFN0eWxlcyA9IHJlbmRlckluZm8gJiYgcmVuZGVySW5mby5zdHlsZXM7XG5cbiAgICAgIGV4dGVuZFN0eWxlc0RhdGEoanNPYmpTdHlsZXMsIGFwcFN0eWxlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzT2JqO1xuICB9O1xuXG4gIGpzb25Ub053dC5jcmVhdGVOd3QgPSBmdW5jdGlvbihmaWxlbmFtZSwgdmVyc2lvbiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKSB7XG4gICAgdmFyIGpzT2JqID0ganNvblRvTnd0LmJ1aWxkSnNPYmooZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcyk7XG4gICAgcmV0dXJuIGpzb25Ub1NiZ25tbC5idWlsZFN0cmluZyh7c2JnbjoganNPYmp9KTtcbiAgfTtcblxuICByZXR1cm4ganNvblRvTnd0O1xufVxuIiwiXG52YXIgbGlic2JnbmpzID0gcmVxdWlyZSgnbGlic2Jnbi5qcycpO1xudmFyIHJlbmRlckV4dGVuc2lvbiA9IGxpYnNiZ25qcy5yZW5kZXI7XG52YXIgYW5ub3QgPSBsaWJzYmduanMuYW5ub3Q7XG52YXIgcGtnVmVyc2lvbiA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247IC8vIG5lZWQgaW5mbyBhYm91dCBzYmdudml6IHRvIHB1dCBpbiB4bWxcbnZhciBwa2dOYW1lID0gcmVxdWlyZSgnLi4vLi4vcGFja2FnZS5qc29uJykubmFtZTtcbnZhciBwcmV0dHlwcmludCA9IHJlcXVpcmUoJ3ByZXR0eS1kYXRhJykucGQ7XG52YXIgeG1sMmpzID0gcmVxdWlyZSgneG1sMmpzJyk7XG52YXIgbWFwUHJvcGVydGllc0J1aWxkZXIgPSBuZXcgeG1sMmpzLkJ1aWxkZXIoe3Jvb3ROYW1lOiBcIm1hcFByb3BlcnRpZXNcIn0pO1xudmFyIGNvbXBvdW5kRXh0ZW5zaW9uQnVpbGRlciA9IG5ldyB4bWwyanMuQnVpbGRlcih7cm9vdE5hbWU6IFwiZXh0cmFJbmZvXCJ9KTtcbnZhciB0ZXh0VXRpbGl0aWVzID0gcmVxdWlyZSgnLi90ZXh0LXV0aWxpdGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZW1lbnRVdGlsaXRpZXMsIGdyYXBoVXRpbGl0aWVzLCBleHBlcmltZW50YWxEYXRhT3ZlcmxheTtcbiAgdmFyIGN5O1xuXG4gIC8qXG4gICAgICB0YWtlcyByZW5kZXJJbmZvIGFzIGFuIG9wdGlvbmFsIGFyZ3VtZW50LiBJdCBjb250YWlucyBhbGwgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBzYXZlXG4gICAgICB0aGUgc3R5bGUgYW5kIGNvbG9ycyB0byB0aGUgcmVuZGVyIGV4dGVuc2lvbi4gU2VlIG5ld3QvYXBwLXV0aWxpdGllcyBnZXRBbGxTdHlsZXMoKVxuICAgICAgU3RydWN0dXJlOiB7XG4gICAgICAgICAgYmFja2dyb3VuZDogdGhlIG1hcCBiYWNrZ3JvdW5kIGNvbG9yLFxuICAgICAgICAgIGNvbG9yczoge1xuICAgICAgICAgICAgdmFsaWRYbWxWYWx1ZTogY29sb3JfaWRcbiAgICAgICAgICAgIC4uLlxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3R5bGVzOiB7XG4gICAgICAgICAgICAgIHN0eWxlS2V5MToge1xuICAgICAgICAgICAgICAgICAgaWRMaXN0OiBsaXN0IG9mIHRoZSBub2RlcyBpZHMgdGhhdCBoYXZlIHRoaXMgc3R5bGVcbiAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogLi4uXG4gICAgICAgICAgICAgICAgICAgICAgZmlsbDogLi4uXG4gICAgICAgICAgICAgICAgICAgICAgLi4uXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3R5bGVLZXkyOiAuLi5cbiAgICAgICAgICAgICAgLi4uXG4gICAgICAgICAgfVxuICAgICAgfVxuICAqL1xuICBmdW5jdGlvbiBqc29uVG9TYmdubWwgKHBhcmFtKSB7XG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgZ3JhcGhVdGlsaXRpZXMgPSBwYXJhbS5ncmFwaFV0aWxpdGllcztcbiAgICBleHBlcmltZW50YWxEYXRhT3ZlcmxheSA9IHBhcmFtLmV4cGVyaW1lbnRhbERhdGFPdmVybGF5O1xuICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgfVxuXG4gIC8qXG4gICB2ZXJzaW9uIGlzIGVpdGhlciAwLjIgb3IgMC4zIG9yIHBsYWluLCAwLjMgdXNlZCBhcyBkZWZhdWx0IGlmIG5vbmUgcHJvdmlkZWQuXG4gICBPbmx5IGRpZmZlcmVuY2UgcmlnaHQgbm93IGlzIHRoYXQgPG1hcD4gZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gaWQgYXR0cmlidXRlIGluIDAuMiwgYW5kIGhhcyBvbiBpbiAwLjMuXG4gICBTZXJpb3VzIGNoYW5nZXMgb2NjdXIgYmV0d2VlbiB0aGUgZm9ybWF0IHZlcnNpb24gZm9yIHN1Ym1hcHMgY29udGVudC4gVGhvc2UgY2hhbmdlcyBhcmUgbm90IGltcGxlbWVudGVkIHlldC5cbiAgIFRPRE8gaW1wbGVtZW50IDAuMyBjaGFuZ2VzIHdoZW4gc3VibWFwIHN1cHBvcnQgaXMgZnVsbHkgdGhlcmUuXG4gICAqL1xuICBqc29uVG9TYmdubWwuYnVpbGRKc09iaiA9IGZ1bmN0aW9uKGZpbGVuYW1lLCB2ZXJzaW9uLCByZW5kZXJJbmZvLCBtYXBQcm9wZXJ0aWVzLCBub2RlcywgZWRnZXMpe1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbWFwSUQgPSB0ZXh0VXRpbGl0aWVzLmdldFhNTFZhbGlkSWQoZmlsZW5hbWUpO1xuICAgIHZhciBoYXNFeHRlbnNpb24gPSBmYWxzZTtcbiAgICB2YXIgaGFzUmVuZGVyRXh0ZW5zaW9uID0gZmFsc2U7XG4gICAgdmFyIG1hcFR5cGUgPSAoIG1hcFByb3BlcnRpZXMgJiYgbWFwUHJvcGVydGllcy5tYXBUeXBlICkgfHwgZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlO1xuICAgIHRoaXMubm9kZXMgPSBub2RlcyB8fCBjeS5ub2RlcygpO1xuICAgIHRoaXMuZWRnZXMgPSBlZGdlcyB8fCBjeS5lZGdlcygpO1xuXG4gICAgdmFyIGNvbGxhcHNlZENoaWxkcmVuID0gZWxlbWVudFV0aWxpdGllcy5nZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5KHRoaXMubm9kZXMpO1xuICAgIHRoaXMuYWxsQ29sbGFwc2VkTm9kZXMgPSBjb2xsYXBzZWRDaGlsZHJlbi5maWx0ZXIoXCJub2RlXCIpO1xuICAgIHRoaXMuYWxsQ29sbGFwc2VkRWRnZXMgPSBjb2xsYXBzZWRDaGlsZHJlbi5maWx0ZXIoXCJlZGdlXCIpO1xuXG4gICAgaWYgKHR5cGVvZiByZW5kZXJJbmZvICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgIGhhc0V4dGVuc2lvbiA9IHRydWU7XG4gICAgICAgaGFzUmVuZGVyRXh0ZW5zaW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZih0eXBlb2YgdmVyc2lvbiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGRlZmF1bHQgaWYgbm90IHNwZWNpZmllZFxuICAgICAgdmVyc2lvbiA9IFwiMC4zXCI7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgdmVyc2lvbiB2YWxpZGl0eVxuICAgIGlmKHZlcnNpb24gIT09IFwiMC4yXCIgJiYgdmVyc2lvbiAhPT0gXCIwLjNcIiAmJiB2ZXJzaW9uICE9PSBcInBsYWluXCIgJiYgdmVyc2lvbiAhPT0gXCJwbGFpbjNcIikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgU0JHTi1NTCB2ZXJzaW9uIHByb3ZpZGVkLiBFeHBlY3RlZCAwLjIsIDAuMywgcGxhaW4gb3IgcGxhaW4zLCBnb3Q6IFwiICsgdmVyc2lvbik7XG4gICAgICByZXR1cm4gXCJFcnJvclwiO1xuICAgIH1cblxuICAgIHZhciBtYXBMYW5ndWFnZSA9IGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZVRvTGFuZ3VhZ2UobWFwVHlwZSk7XG5cbiAgICAvL2FkZCBoZWFkZXJzXG4gICAgeG1sSGVhZGVyID0gXCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCcgc3RhbmRhbG9uZT0neWVzJz8+XFxuXCI7ICBcbiAgICB2YXIgdmVyc2lvbk5vO1xuICAgIGlmKHZlcnNpb24gPT09IFwicGxhaW5cIil7XG4gICAgICB2ZXJzaW9uTm8gPSBcIjAuMlwiO1xuICAgIH1lbHNlIGlmKHZlcnNpb24gPT09IFwicGxhaW4zXCIpe1xuICAgICAgdmVyc2lvbk5vID0gXCIwLjNcIjtcbiAgICB9ZWxzZXtcbiAgICAgIHZlcnNpb25ObyA9IHZlcnNpb247XG4gICAgfVxuICAgIC8vdmFyIHZlcnNpb25ObyA9ICh2ZXJzaW9uID09PSBcInBsYWluXCIpID8gXCIwLjJcIiA6IHZlcnNpb247XG4gICAgdmFyIHNiZ24gPSBuZXcgbGlic2JnbmpzLlNiZ24oe3htbG5zOiAnaHR0cDovL3NiZ24ub3JnL2xpYnNiZ24vJyArIHZlcnNpb25Ob30pO1xuXG4gICAgdmFyIG1hcDtcbiAgICBpZih2ZXJzaW9uID09PSBcIjAuM1wiIHx8IHZlcnNpb24gPT09XCJwbGFpbjNcIikge1xuICAgICAgdmFyIG1hcCA9IG5ldyBsaWJzYmduanMuTWFwKHtsYW5ndWFnZTogbWFwTGFuZ3VhZ2UsIGlkOiBtYXBJRH0pO1xuICAgIH1cbiAgICBlbHNlIGlmKHZlcnNpb24gPT09IFwiMC4yXCIgfHwgdmVyc2lvbiA9PT0gXCJwbGFpblwiKSB7XG4gICAgICB2YXIgbWFwID0gbmV3IGxpYnNiZ25qcy5NYXAoe2xhbmd1YWdlOiBtYXBMYW5ndWFnZX0pO1xuICAgIH1cblxuICAgIGlmIChoYXNFeHRlbnNpb24pIHsgLy8gZXh0ZW5zaW9uIGlzIHRoZXJlXG4gICAgICAgdmFyIGV4dGVuc2lvbiA9IG5ldyBsaWJzYmduanMuRXh0ZW5zaW9uKCk7XG4gICAgICAgaWYgKGhhc1JlbmRlckV4dGVuc2lvbikge1xuICAgICAgICAgICBleHRlbnNpb24uYWRkKHNlbGYuZ2V0UmVuZGVyRXh0ZW5zaW9uU2Jnbm1sKHJlbmRlckluZm8pKTtcbiAgICAgICB9XG4gICAgICAgbWFwLnNldEV4dGVuc2lvbihleHRlbnNpb24pO1xuICAgICAgIGlmIChtYXBQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgIGRlbGV0ZSBtYXBQcm9wZXJ0aWVzLmV4cGVyaW1lbnREZXNjcmlwdGlvbjtcbiAgICAgICAgICAgdmFyIHhtbCA9IG1hcFByb3BlcnRpZXNCdWlsZGVyLmJ1aWxkT2JqZWN0KG1hcFByb3BlcnRpZXMpO1xuICAgICAgICAgICBtYXAuZXh0ZW5zaW9uLmFkZCh4bWwpO1xuICAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAobWFwUHJvcGVydGllcykge1xuICAgICAgIG1hcC5zZXRFeHRlbnNpb24obmV3IGxpYnNiZ25qcy5FeHRlbnNpb24oKSk7XG4gICAgICAgbWFwLmV4dGVuc2lvbi5hZGQobWFwUHJvcGVydGllc0J1aWxkZXIuYnVpbGRPYmplY3QobWFwUHJvcGVydGllcykpO1xuICAgIH1cblxuICAgIC8vIGdldCBhbGwgZ2x5cGhzXG4gICAgdmFyIGdseXBoTGlzdCA9IFtdO1xuICAgIC8vIGJlIGNhcmVmdWwgdGhhdCA6dmlzaWJsZSBpcyBhbHNvIHVzZWQgZHVyaW5nIHJlY3Vyc2l2ZSBzZWFyY2ggb2Ygbm9kZXNcbiAgICAvLyBpbiB0aGUgZ2V0R2x5cGhTYmdubWwgZnVuY3Rpb24uIElmIG5vdCBzZXQgYWNjb3JkaW5nbHksIGRpc2NyZXBhbmNpZXMgd2lsbCBvY2N1ci5cbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5ub2Rlcy5lYWNoKGZ1bmN0aW9uKGVsZSwgaSl7XG4gICAgICAgaWYodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgZWxlID0gaTtcbiAgICAgICB9XG4gICAgICAgaWYoanNvblRvU2Jnbm1sLmNoaWxkT2ZOb25lKGVsZSwgc2VsZi5ub2RlcykpXG4gICAgICAgICAgIGdseXBoTGlzdCA9IGdseXBoTGlzdC5jb25jYXQoc2VsZi5nZXRHbHlwaFNiZ25tbChlbGUsIHZlcnNpb24pKTsgLy8gcmV0dXJucyBwb3RlbnRpYWxseSBtb3JlIHRoYW4gMSBnbHlwaFxuICAgIH0pO1xuICAgIC8vIGFkZCB0aGVtIHRvIHRoZSBtYXBcbiAgICBmb3IodmFyIGk9MDsgaTxnbHlwaExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICBpZiAodmVyc2lvbiA9PT0gXCJwbGFpblwiKVxuICAgICAgICAgZ2x5cGhMaXN0W2ldLmV4dGVuc2lvbiA9IG51bGw7XG4gICAgICAgbWFwLmFkZEdseXBoKGdseXBoTGlzdFtpXSk7XG4gICAgfVxuICAgIC8vIGdldCBhbGwgYXJjc1xuICAgIHZhciBlZGdlcyA9IHRoaXMuYWxsQ29sbGFwc2VkRWRnZXMudW5pb24odGhpcy5lZGdlcyk7XG4gICAgZWRnZXMuZWFjaChmdW5jdGlvbihlbGUsIGkpe1xuICAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgfVxuICAgICAgIHZhciBhcmMgPSBzZWxmLmdldEFyY1NiZ25tbChlbGUsIHZlcnNpb24pO1xuICAgICAgIGlmICh2ZXJzaW9uID09PSBcInBsYWluXCIpXG4gICAgICAgICBhcmMuZXh0ZW5zaW9uID0gbnVsbDtcbiAgICAgICBtYXAuYWRkQXJjKGFyYyk7XG4gICAgfSk7XG5cbiAgICBzYmduLmFkZE1hcChtYXApO1xuXG4gICAgcmV0dXJuIHNiZ24uYnVpbGRKc09iaigpO1xuICB9O1xuXG4gIGpzb25Ub1NiZ25tbC5jcmVhdGVTYmdubWwgPSBmdW5jdGlvbihmaWxlbmFtZSwgdmVyc2lvbiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKSB7XG4gICAgdmFyIGpzT2JqID0ganNvblRvU2Jnbm1sLmJ1aWxkSnNPYmooZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcyk7XG4gICAgcmV0dXJuIGpzb25Ub1NiZ25tbC5idWlsZFN0cmluZyh7c2JnbjoganNPYmp9KTtcbiAgfVxuXG4gIC8vIENvcGllcyBhbmQgZXh0ZW5kcyBidWlsZFN0cmluZygpIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9zYmduL2xpYnNiZ24uanMvYmxvYi9tYXN0ZXIvc3JjL3V0aWxpdGllcy5qc1xuICBqc29uVG9TYmdubWwuYnVpbGRTdHJpbmcgPSBmdW5jdGlvbihvYmopIHtcbiAgICB2YXIgeG1sU3RyaW5nID0gIG5ldyB4bWwyanMuQnVpbGRlcih7XG4gIFx0XHRoZWFkbGVzczogdHJ1ZSxcbiAgXHRcdHJlbmRlck9wdHM6IHtwcmV0dHk6IGZhbHNlfVxuICBcdH0pLmJ1aWxkT2JqZWN0KG9iaik7XG5cbiAgICAvLyBjaGFuZ2UgbmFtaW5nIGNvbnZlbnRpb24gZnJvbSBDYW1lbCBDYXNlICh2YXJpYWJsZU5hbWUpIHRvIEtlYmFiIGNhc2UgKHZhcmlhYmxlLW5hbWUpXG4gICAgdmFyIG1hdGNoUmVzdWx0ID0geG1sU3RyaW5nLm1hdGNoKFwiPHJlbmRlckluZm9ybWF0aW9uW15dKjwvcmVuZGVySW5mb3JtYXRpb24+XCIpO1xuICAgIGlmKG1hdGNoUmVzdWx0ICE9IG51bGwpe1xuICAgICAgdmFyIGltYWdlc0VsZW1lbnRNYXRjaCA9IHhtbFN0cmluZy5tYXRjaChcIjxsaXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzW15dKjwvbGlzdE9mQmFja2dyb3VuZEltYWdlcz5cIik7XG4gICAgICB2YXIgaW1hZ2VzRWxlbWVudDtcbiAgICAgIGlmKGltYWdlc0VsZW1lbnRNYXRjaCAhPSBudWxsKXtcbiAgICAgICAgaW1hZ2VzRWxlbWVudCA9IGltYWdlc0VsZW1lbnRNYXRjaFswXTtcbiAgICAgIH1cbiAgICAgIHZhciByZW5kZXJJbmZvU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07XG4gICAgICB2YXIgcmVuZGVySW5mb1N0cmluZ0NvcHkgPSAoJyAnICsgcmVuZGVySW5mb1N0cmluZykuc2xpY2UoMSk7XG4gICAgICBjb25zdCByZWdleCA9IC9cXHMoW1xcU10rKShbXFxzXSopPS9nO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHZhciBtYXRjaGVzID0gW107XG4gICAgICB3aGlsZShyZXN1bHQgPSByZWdleC5leGVjKHJlbmRlckluZm9TdHJpbmcpKSB7XG4gICAgICAgIG1hdGNoZXMucHVzaChyZXN1bHRbMF0pO1xuICAgICAgfTtcbiAgICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbihtYXRjaCl7XG5cbiAgICAgICAgaWYobWF0Y2ggIT0gXCIgaWRMaXN0PVwiKVxuICAgICAgICAgIHJlbmRlckluZm9TdHJpbmcgPSByZW5kZXJJbmZvU3RyaW5nLnJlcGxhY2UobWF0Y2ggLCB0ZXh0VXRpbGl0aWVzLkZyb21DYW1lbFRvS2ViYWJDYXNlKG1hdGNoKSk7XG4gICAgICB9KTtcblxuICAgICAgeG1sU3RyaW5nID0geG1sU3RyaW5nLnJlcGxhY2UocmVuZGVySW5mb1N0cmluZ0NvcHksIHJlbmRlckluZm9TdHJpbmcpO1xuICAgICAgdmFyIGltYWdlc0VsZW1lbnRNYXRjaERpcnR5ID0geG1sU3RyaW5nLm1hdGNoKFwiPGxpc3RPZkJhY2tncm91bmRJbWFnZXNbXl0qPC9saXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzPlwiKTtcbiAgICAgIGlmKGltYWdlc0VsZW1lbnRNYXRjaERpcnR5ICE9IG51bGwpe1xuICAgICAgICB4bWxTdHJpbmcgPSB4bWxTdHJpbmcucmVwbGFjZShpbWFnZXNFbGVtZW50TWF0Y2hEaXJ0eVswXSxpbWFnZXNFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgXHQvKiBcdGRpcnR5IGhhY2sgbmVlZGVkIHRvIHNvbHZlIHRoZSBuZXdsaW5lIGNoYXIgZW5jb2RpbmcgcHJvYmxlbVxuICBcdFx0eG1sMmpzIGRvZXNuJ3QgZW5jb2RlIFxcbiBhcyAmI3hBOyB3ZSBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5XG4gIFx0Ki9cbiAgXHR2YXIgcmUgPSAvPGxhYmVsIHRleHQ9XCIoKC58XFxuKykrPylcIi9nbTtcbiAgXHR2YXIgeG1sU3RyaW5nX2NvcnJlY3RMYWJlbCA9IHhtbFN0cmluZy5yZXBsYWNlKHJlLCBmdW5jdGlvbihtYXRjaCwgcDEsIHAyKSB7XG4gIFx0XHRyZXR1cm4gJzxsYWJlbCB0ZXh0PVwiJytwMS5yZXBsYWNlKC9cXG4vZywgXCImI3hBO1wiKSsnXCInO1xuICBcdH0pO1xuXG4gICAgdmFyIHhtbEhlYWRlciA9IFwiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J3llcyc/PlxcblwiO1xuICAgIC8qXG4gICAgICBwcmV0dHlwcmludCBwdXRzIGEgbGluZSBicmVhayBpbnNpZGUgdGhlIHJvb3QgPHNiZ24+IHRhZyBiZWZvcmUgdGhlIHhtbG5zIGF0dHJpYnV0ZS5cbiAgICAgIFRoaXMgaXMgcGVyZmVjbHkgdmFsaWQsIGJ1dCBWYW50ZWQgZG9lc24ndCBsaWtlIGl0IGFuZCBjYW5ub3QgbG9hZCB0aG9zZSBmaWxlcyBhcyBpcy5cbiAgICAgIFRoaXMgbGluZSBicmVhayBpcyByZW1vdmVkIGhlcmUgdG8gbWFrZSBOZXd0IG91dHB1dCBkaXJlY3RseSBjb21wYXRpYmxlIHdpdGggVmFudGVkLiBUaGlzIGlzc3VlIHdpbGwgYmUgcmVwb3J0ZWRcbiAgICAgIHRvIHRoZSBWYW50ZWQgZ3V5cyBhbmQgaG9wZWZ1bGx5IGZpeGVkIGF0IHNvbWUgcG9pbnQuIEFmdGVyIHRoYXQgdGhlIGZvbGxvd2luZyB3b3JrYXJvdW5kIGNhbiBiZSByZW1vdmVkLlxuICAgICovXG4gICAgdmFyIHhtbGJvZHkgPSBwcmV0dHlwcmludC54bWwoeG1sU3RyaW5nX2NvcnJlY3RMYWJlbCkucmVwbGFjZShcIjxzYmduIFxcbiAgeG1sbnM9XFxcImh0dHA6Ly9zYmduLm9yZy9saWJzYmduXCIsIFwiPHNiZ24geG1sbnM9XFxcImh0dHA6Ly9zYmduLm9yZy9saWJzYmduXCIpO1xuXG4gICAgcmV0dXJuIHhtbEhlYWRlciArIHhtbGJvZHk7XG4gIH1cblxuICAvLyBzZWUgY3JlYXRlU2Jnbm1sIGZvciBpbmZvIG9uIHRoZSBzdHJ1Y3R1cmUgb2YgcmVuZGVySW5mb1xuICBqc29uVG9TYmdubWwuZ2V0UmVuZGVyRXh0ZW5zaW9uU2Jnbm1sID0gZnVuY3Rpb24ocmVuZGVySW5mbykge1xuICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgbWFpbiBjb250YWluZXJcbiAgICAgIHZhciByZW5kZXJJbmZvcm1hdGlvbiA9IG5ldyByZW5kZXJFeHRlbnNpb24uUmVuZGVySW5mb3JtYXRpb24oeyBpZDogJ3JlbmRlckluZm9ybWF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHJlbmRlckluZm8uYmFja2dyb3VuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtTmFtZTogcGtnTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtVmVyc2lvbjogcGtnVmVyc2lvbiB9KTtcblxuICAgICAgLy8gcG9wdWxhdGUgbGlzdCBvZiBjb2xvcnNcbiAgICAgIHZhciBsaXN0T2ZDb2xvckRlZmluaXRpb25zID0gbmV3IHJlbmRlckV4dGVuc2lvbi5MaXN0T2ZDb2xvckRlZmluaXRpb25zKCk7XG4gICAgICBmb3IgKHZhciBjb2xvciBpbiByZW5kZXJJbmZvLmNvbG9ycykge1xuICAgICAgICAgIHZhciBjb2xvckRlZmluaXRpb24gPSBuZXcgcmVuZGVyRXh0ZW5zaW9uLkNvbG9yRGVmaW5pdGlvbih7aWQ6IHJlbmRlckluZm8uY29sb3JzW2NvbG9yXSwgdmFsdWU6IGNvbG9yfSk7XG4gICAgICAgICAgbGlzdE9mQ29sb3JEZWZpbml0aW9ucy5hZGRDb2xvckRlZmluaXRpb24oY29sb3JEZWZpbml0aW9uKTtcbiAgICAgIH1cbiAgICAgIHJlbmRlckluZm9ybWF0aW9uLnNldExpc3RPZkNvbG9yRGVmaW5pdGlvbnMobGlzdE9mQ29sb3JEZWZpbml0aW9ucyk7XG4gICAgICBcbiAgICAgICAgLy8gcG9wdWxhdGUgbGlzdCBvZiBiYWNrZ3JvdW5kIGltYWdlc1xuICAgICAgICB2YXIgbGlzdE9mQmFja2dyb3VuZEltYWdlcyA9IG5ldyByZW5kZXJFeHRlbnNpb24uTGlzdE9mQmFja2dyb3VuZEltYWdlcygpO1xuICAgICAgICBpZighKE9iamVjdC5rZXlzKGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmdldFBhcnNlZERhdGFNYXAoKSkubGVuZ3RoID4gMCkpe1xuICAgICAgICAgIGZvciAodmFyIGltZyBpbiByZW5kZXJJbmZvLmltYWdlcykge1xuICAgICAgICAgICAgICB2YXIgYmFja2dyb3VuZEltYWdlID0gbmV3IHJlbmRlckV4dGVuc2lvbi5CYWNrZ3JvdW5kSW1hZ2Uoe2lkOiByZW5kZXJJbmZvLmltYWdlc1tpbWddLCB2YWx1ZTogaW1nfSk7XG4gICAgICAgICAgICAgIGxpc3RPZkJhY2tncm91bmRJbWFnZXMuYWRkQmFja2dyb3VuZEltYWdlKGJhY2tncm91bmRJbWFnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm9ybWF0aW9uLnNldExpc3RPZkJhY2tncm91bmRJbWFnZXMobGlzdE9mQmFja2dyb3VuZEltYWdlcyk7XG5cbiAgICAgIC8vIHBvcHVsYXRlcyBzdHlsZXNcbiAgICAgIHZhciBsaXN0T2ZTdHlsZXMgPSBuZXcgcmVuZGVyRXh0ZW5zaW9uLkxpc3RPZlN0eWxlcygpO1xuICAgICAgZm9yICh2YXIga2V5IGluIHJlbmRlckluZm8uc3R5bGVzKSB7XG4gICAgICAgICAgdmFyIHN0eWxlID0gcmVuZGVySW5mby5zdHlsZXNba2V5XTtcbiAgICAgICAgICB2YXIgeG1sU3R5bGUgPSBuZXcgcmVuZGVyRXh0ZW5zaW9uLlN0eWxlKHtpZDogdGV4dFV0aWxpdGllcy5nZXRYTUxWYWxpZElkKGtleSksIGlkTGlzdDogc3R5bGUuaWRMaXN0LmpvaW4oJyAnKX0pO1xuICAgICAgICAgIHZhciBnID0gbmV3IHJlbmRlckV4dGVuc2lvbi5SZW5kZXJHcm91cCh7XG4gICAgICAgICAgICAgIGZvbnRTaXplOiBzdHlsZS5wcm9wZXJ0aWVzLmZvbnRTaXplLFxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBzdHlsZS5wcm9wZXJ0aWVzLmZvbnRGYW1pbHksXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IHN0eWxlLnByb3BlcnRpZXMuZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgZm9udFN0eWxlOiBzdHlsZS5wcm9wZXJ0aWVzLmZvbnRTdHlsZSxcbiAgICAgICAgICAgICAgZm9udENvbG9yOiBzdHlsZS5wcm9wZXJ0aWVzLmZvbnRDb2xvcixcbiAgICAgICAgICAgICAgZmlsbDogc3R5bGUucHJvcGVydGllcy5maWxsLCAvLyBmaWxsIGNvbG9yXG4gICAgICAgICAgICAgIHN0cm9rZTogc3R5bGUucHJvcGVydGllcy5zdHJva2UsIC8vIHN0cm9rZSBjb2xvclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogc3R5bGUucHJvcGVydGllcy5zdHJva2VXaWR0aCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBzdHlsZS5wcm9wZXJ0aWVzLmJhY2tncm91bmRJbWFnZSxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZEZpdDogc3R5bGUucHJvcGVydGllcy5iYWNrZ3JvdW5kRml0LFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kUG9zWDogc3R5bGUucHJvcGVydGllcy5iYWNrZ3JvdW5kUG9zWCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc1k6IHN0eWxlLnByb3BlcnRpZXMuYmFja2dyb3VuZFBvc1ksXG4gICAgICAgICAgICAgIGJhY2tncm91bmRXaWR0aDogc3R5bGUucHJvcGVydGllcy5iYWNrZ3JvdW5kV2lkdGgsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRIZWlnaHQ6IHN0eWxlLnByb3BlcnRpZXMuYmFja2dyb3VuZEhlaWdodCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZEltYWdlT3BhY2l0eTogc3R5bGUucHJvcGVydGllcy5iYWNrZ3JvdW5kSW1hZ2VPcGFjaXR5LFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kT3BhY2l0eTogc3R5bGUucHJvcGVydGllcy5iYWNrZ3JvdW5kT3BhY2l0eVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHhtbFN0eWxlLnNldFJlbmRlckdyb3VwKGcpO1xuICAgICAgICAgIGxpc3RPZlN0eWxlcy5hZGRTdHlsZSh4bWxTdHlsZSk7XG4gICAgICB9XG4gICAgICByZW5kZXJJbmZvcm1hdGlvbi5zZXRMaXN0T2ZTdHlsZXMobGlzdE9mU3R5bGVzKTtcblxuICAgICAgcmV0dXJuIHJlbmRlckluZm9ybWF0aW9uO1xuICB9O1xuXG4gIGpzb25Ub1NiZ25tbC5nZXRBbm5vdGF0aW9uRXh0ZW5zaW9uID0gZnVuY3Rpb24oY3lFbGVtZW50KSB7XG4gICAgICB2YXIgYW5ub3RhdGlvbnMgPSBjeUVsZW1lbnQuZGF0YSgnYW5ub3RhdGlvbnMnKTtcbiAgICAgIHZhciBhbm5vdEV4dCA9IG5ldyBhbm5vdC5Bbm5vdGF0aW9uKCk7XG4gICAgICB2YXIgcmRmRWxlbWVudCA9IG5ldyBhbm5vdC5SZGZFbGVtZW50KCk7XG4gICAgICBmb3IgKHZhciBhbm5vdElEIGluIGFubm90YXRpb25zKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRBbm5vdCA9IGFubm90YXRpb25zW2Fubm90SURdO1xuXG4gICAgICAgICAgLy8gY2hlY2sgdmFsaWRpdHkgb2YgYW5ub3RhdGlvblxuICAgICAgICAgIGlmKGN1cnJlbnRBbm5vdC5zdGF0dXMgIT0gJ3ZhbGlkYXRlZCcgfHwgIWN1cnJlbnRBbm5vdC5zZWxlY3RlZERCIHx8ICFjdXJyZW50QW5ub3QuYW5ub3RhdGlvblZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIGlmIHVuY29udHJvbGxlZCB2b2NhYnVsYXJ5XG4gICAgICAgICAgaWYoY3VycmVudEFubm90LnNlbGVjdGVkUmVsYXRpb24gPT0gXCJzaW86U0lPXzAwMDIyM1wiKSB7XG4gICAgICAgICAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgICAgICAgICAgb2JqW2N1cnJlbnRBbm5vdC5zZWxlY3RlZERCXSA9IGN1cnJlbnRBbm5vdC5hbm5vdGF0aW9uVmFsdWU7XG4gICAgICAgICAgICAgIHJkZkVsZW1lbnQuYWRkQ3VzdG9tUHJvcGVydHkoJyMnK2N5RWxlbWVudC5kYXRhKCdpZCcpICwgb2JqKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgICAgICAgICAgb2JqW2N1cnJlbnRBbm5vdC5zZWxlY3RlZFJlbGF0aW9uXSA9IGN1cnJlbnRBbm5vdC5hbm5vdGF0aW9uVmFsdWU7XG4gICAgICAgICAgICAgIHJkZkVsZW1lbnQuYWRkUmVzb3VyY2UoJyMnK2N5RWxlbWVudC5kYXRhKCdpZCcpICwgb2JqKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBhbm5vdEV4dC5zZXRSZGZFbGVtZW50KHJkZkVsZW1lbnQpO1xuICAgICAgcmV0dXJuIGFubm90RXh0O1xuICB9O1xuXG4gIGpzb25Ub1NiZ25tbC5nZXRHbHlwaFNiZ25tbCA9IGZ1bmN0aW9uKG5vZGUsIHZlcnNpb24pe1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbm9kZUNsYXNzID0gbm9kZS5fcHJpdmF0ZS5kYXRhLmNsYXNzO1xuICAgIHZhciBnbHlwaExpc3QgPSBbXTtcblxuICAgIGlmKCBub2RlQ2xhc3Muc3RhcnRzV2l0aCgnQkEnKSkge1xuICAgICAgIG5vZGVDbGFzcyA9IFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiO1xuICAgIH1cblxuICAgIHZhciBnbHlwaCA9IG5ldyBsaWJzYmduanMuR2x5cGgoe2lkOiBub2RlLl9wcml2YXRlLmRhdGEuaWQsIGNsYXNzXzogbm9kZUNsYXNzfSk7XG5cbiAgICAvLyBhc3NpZ24gY29tcGFydG1lbnRSZWZcbiAgICBpZihub2RlLnBhcmVudCgpICYmIG5vZGUucGFyZW50KCkubGVuZ3RoID4gMCl7XG4gICAgICAgaWYobm9kZUNsYXNzID09PSBcImNvbXBhcnRtZW50XCIpe1xuICAgICAgICAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQoKTtcbiAgICAgICAgICAgZ2x5cGguY29tcGFydG1lbnRSZWYgPSBub2RlLl9wcml2YXRlLmRhdGEucGFyZW50O1xuICAgICAgIH1cbiAgICAgICBlbHNlIHtcbiAgICAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50KClbMF07XG4gICAgICAgICAgIGlmKHBhcmVudC5fcHJpdmF0ZS5kYXRhLmNsYXNzID09IFwiY29tcGFydG1lbnRcIilcbiAgICAgICAgICAgICAgIGdseXBoLmNvbXBhcnRtZW50UmVmID0gcGFyZW50Ll9wcml2YXRlLmRhdGEuaWQ7XG4gICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1pc2MgaW5mb3JtYXRpb25cbiAgICB2YXIgbGFiZWwgPSBub2RlLl9wcml2YXRlLmRhdGEubGFiZWw7XG4gICAgaWYodHlwZW9mIGxhYmVsICE9ICd1bmRlZmluZWQnKVxuICAgICAgIGdseXBoLnNldExhYmVsKG5ldyBsaWJzYmduanMuTGFiZWwoe3RleHQ6IGxhYmVsfSkpO1xuICAgIC8vYWRkIGNsb25lIGluZm9ybWF0aW9uXG4gICAgaWYodHlwZW9mIG5vZGUuX3ByaXZhdGUuZGF0YS5jbG9uZW1hcmtlciAhPSAndW5kZWZpbmVkJylcbiAgICAgICBnbHlwaC5zZXRDbG9uZShuZXcgbGlic2JnbmpzLkNsb25lVHlwZSgpKTtcbiAgICAvL2FkZCBiYm94IGluZm9ybWF0aW9uXG4gICAgZ2x5cGguc2V0QmJveCh0aGlzLmFkZEdseXBoQmJveChub2RlKSk7XG5cbiAgICBpZihub2RlLmlzUGFyZW50KCkgfHwgbm9kZS5kYXRhKCkuY2xhc3MgPT0gJ3RvcG9sb2d5IGdyb3VwJyB8fCBub2RlLmRhdGEoKS5jbGFzcyA9PSAnc3VibWFwJyB8fCBub2RlLmRhdGEoKS5jbGFzcyA9PSAnY29tcGxleCcgfHwgbm9kZS5kYXRhKCkuY2xhc3MgPT0gJ2NvbXBhcnRtZW50Jyl7XG4gICAgICB2YXIgZXh0cmFJbmZvID0ge307XG4gICAgICBleHRyYUluZm8udyA9IG5vZGUud2lkdGgoKTtcbiAgICAgIGV4dHJhSW5mby5oID0gbm9kZS5oZWlnaHQoKTtcbiAgICAgIGV4dHJhSW5mby5taW5XID0gTnVtYmVyKG5vZGUuY3NzKFwibWluLXdpZHRoXCIpLnJlcGxhY2UoXCJweFwiLFwiXCIpKTtcbiAgICAgIGV4dHJhSW5mby5taW5IID0gTnVtYmVyKG5vZGUuY3NzKFwibWluLWhlaWdodFwiKS5yZXBsYWNlKFwicHhcIixcIlwiKSk7XG4gICAgICBleHRyYUluZm8uV0xCaWFzID0gTnVtYmVyKG5vZGUuY3NzKFwibWluLXdpZHRoLWJpYXMtbGVmdFwiKS5yZXBsYWNlKFwicHhcIixcIlwiKSk7XG4gICAgICBleHRyYUluZm8uV1JCaWFzID0gTnVtYmVyKG5vZGUuY3NzKFwibWluLXdpZHRoLWJpYXMtcmlnaHRcIikucmVwbGFjZShcInB4XCIsXCJcIikpO1xuICAgICAgZXh0cmFJbmZvLkhUQmlhcyA9IE51bWJlcihub2RlLmNzcyhcIm1pbi1oZWlnaHQtYmlhcy10b3BcIikucmVwbGFjZShcInB4XCIsXCJcIikpO1xuICAgICAgZXh0cmFJbmZvLkhCQmlhcyA9IE51bWJlcihub2RlLmNzcyhcIm1pbi1oZWlnaHQtYmlhcy1ib3R0b21cIikucmVwbGFjZShcInB4XCIsXCJcIikpO1xuICAgICAgZ2x5cGguc2V0RXh0ZW5zaW9uKG5ldyBsaWJzYmduanMuRXh0ZW5zaW9uKCkpO1xuICAgICAgZ2x5cGguZXh0ZW5zaW9uLmFkZChjb21wb3VuZEV4dGVuc2lvbkJ1aWxkZXIuYnVpbGRPYmplY3QoZXh0cmFJbmZvKSk7XG5cbiAgICB9XG4gICBcbiAgICAvL2FkZCBwb3J0IGluZm9ybWF0aW9uXG4gICAgdmFyIHBvcnRzID0gbm9kZS5fcHJpdmF0ZS5kYXRhLnBvcnRzO1xuICAgIGZvcih2YXIgaSA9IDAgOyBpIDwgcG9ydHMubGVuZ3RoIDsgaSsrKXtcbiAgICAgICB2YXIgb3JpZW50YXRpb24gPSBwb3J0c1tpXS54ID09PSAwID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgICAvLyBUaGlzIGlzIHRoZSByYXRpbyBvZiB0aGUgYXJlYSBvY2N1cGllZCBmb3IgcG9ydHMgb3ZlciB0aGUgd2hvbGUgc2hhcGVcbiAgICAgICB2YXIgcmF0aW8gPSBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IE1hdGguYWJzKHBvcnRzW2ldLnkpIC8gNTAgOiBNYXRoLmFicyhwb3J0c1tpXS54KSAvIDUwO1xuXG4gICAgICAgLy8gRGl2aWRlIHRoZSBub2RlIHNpemVzIGJ5IHRoZSByYXRpbyBiZWNhdXNlIHRoYXQgc2l6ZXMgaW5jbHVkZXMgcG9ydHMgYXMgd2VsbFxuICAgICAgIHZhciB4ID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi54ICsgcG9ydHNbaV0ueCAqICggbm9kZS53aWR0aCgpIC8gcmF0aW8gKSAvIDEwMDtcbiAgICAgICB2YXIgeSA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueSArIHBvcnRzW2ldLnkgKiAoIG5vZGUuaGVpZ2h0KCkgLyByYXRpbyApIC8gMTAwO1xuXG4gICAgICAgZ2x5cGguYWRkUG9ydChuZXcgbGlic2JnbmpzLlBvcnQoe2lkOiBwb3J0c1tpXS5pZCwgeDogeCwgeTogeX0pKTtcbiAgICB9XG4gICAgLy9hZGQgc3RhdGUgYW5kIGluZm8gYm94IGluZm9ybWF0aW9uXG4gICAgZm9yKHZhciBpID0gMCA7IGkgPCBub2RlLl9wcml2YXRlLmRhdGEuc3RhdGVzYW5kaW5mb3MubGVuZ3RoIDsgaSsrKXtcbiAgICAgICB2YXIgYm94R2x5cGggPSBub2RlLl9wcml2YXRlLmRhdGEuc3RhdGVzYW5kaW5mb3NbaV07XG4gICAgICAgdmFyIHN0YXRlc2FuZGluZm9zSWQgPSBib3hHbHlwaC5pZDtcbiAgICAgICBpZihib3hHbHlwaC5jbGF6eiA9PT0gXCJzdGF0ZSB2YXJpYWJsZVwiKXtcbiAgICAgICAgICAgZ2x5cGguYWRkR2x5cGhNZW1iZXIodGhpcy5hZGRTdGF0ZUJveEdseXBoKGJveEdseXBoLCBzdGF0ZXNhbmRpbmZvc0lkLCBub2RlKSk7XG4gICAgICAgfVxuICAgICAgIGVsc2UgaWYoYm94R2x5cGguY2xhenogPT09IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiKXtcbiAgICAgICAgICAgZ2x5cGguYWRkR2x5cGhNZW1iZXIodGhpcy5hZGRJbmZvQm94R2x5cGgoYm94R2x5cGgsIHN0YXRlc2FuZGluZm9zSWQsIG5vZGUpKTtcbiAgICAgICB9XG4gICAgfVxuICAgIC8vIGNoZWNrIGZvciBhbm5vdGF0aW9uc1xuICAgIGlmICh2ZXJzaW9uICE9PSBcInBsYWluXCIgJiYgbm9kZS5kYXRhKCdhbm5vdGF0aW9ucycpICYmICEkLmlzRW1wdHlPYmplY3Qobm9kZS5kYXRhKCdhbm5vdGF0aW9ucycpKSkge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IHNlbGYuZ2V0T3JDcmVhdGVFeHRlbnNpb24oZ2x5cGgpO1xuICAgICAgdmFyIGFubm90RXh0ID0gc2VsZi5nZXRBbm5vdGF0aW9uRXh0ZW5zaW9uKG5vZGUpO1xuICAgICAgZXh0ZW5zaW9uLmFkZChhbm5vdEV4dCk7XG4gICAgfVxuICAgIC8vIGFkZCBnbHlwaCBtZW1iZXJzIHRoYXQgYXJlIG5vdCBzdGF0ZSB2YXJpYWJsZXMgb3IgdW5pdCBvZiBpbmZvOiBzdWJ1bml0c1xuICAgIGlmKG5vZGVDbGFzcyA9PT0gXCJjb21wbGV4XCIgfHwgbm9kZUNsYXNzID09PSBcImNvbXBsZXggbXVsdGltZXJcIiB8fCBub2RlQ2xhc3MgPT09IFwic3VibWFwXCIgfHwgbm9kZUNsYXNzID09PSBcInRvcG9sb2d5IGdyb3VwXCIpe1xuICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcbiAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLnVuaW9uKHRoaXMuYWxsQ29sbGFwc2VkTm9kZXMpO1xuICAgICAgIGlmKG5vZGUuZGF0YSgnY29sbGFwc2VkQ2hpbGRyZW4nKSkge1xuICAgICAgICAgdmFyIGNvbGxhcHNlZENoaWxkcmVuID0gbm9kZS5kYXRhKCdjb2xsYXBzZWRDaGlsZHJlbicpO1xuICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi51bmlvbihjb2xsYXBzZWRDaGlsZHJlbik7XG4gICAgICAgfVxuICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKFwiW3BhcmVudCA9ICdcIisgbm9kZS5pZCgpICsgXCInXVwiKVxuXG4gICAgICAgY2hpbGRyZW4uZWFjaChmdW5jdGlvbihlbGUsIGkpe1xuICAgICAgICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgZWxlID0gaTtcbiAgICAgICAgICAgfVxuICAgICAgICAgICB2YXIgZ2x5cGhNZW1iZXJMaXN0ID0gc2VsZi5nZXRHbHlwaFNiZ25tbChlbGUsIHZlcnNpb24pO1xuICAgICAgICAgICBmb3IgKHZhciBpPTA7IGkgPCBnbHlwaE1lbWJlckxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgIGdseXBoLmFkZEdseXBoTWVtYmVyKGdseXBoTWVtYmVyTGlzdFtpXSk7XG4gICAgICAgICAgIH1cbiAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc2JnbnZpekV4dFN0cmluZyA9IFwiXCI7XG4gICAgdmFyIGhhc05ld3RFeHQgPSBmYWxzZTtcblxuICAgIC8vIGFkZCBpbmZvIGZvciBjb2xsYXBzZWQgbm9kZXNcbiAgICBpZihub2RlLmRhdGEoJ2NvbGxhcHNlZENoaWxkcmVuJykpIHtcbiAgICAgICBzYmdudml6RXh0U3RyaW5nICs9IFwiPGNvbGxhcHNlZC8+XCI7XG4gICAgICAgc2JnbnZpekV4dFN0cmluZyArPSBcIjxwb3NpdGlvbkJlZm9yZVNhdmluZyB4PSdcIiArIG5vZGUucG9zaXRpb24oKS54ICtcIicgeT0nXCIgKyBub2RlLnBvc2l0aW9uKCkueSArIFwiJy8+XCI7XG4gICAgICAgaGFzTmV3dEV4dCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gYWRkIGluZm8gZm9yIGhpZGRlbiBub2Rlc1xuICAgIGlmKG5vZGUuaGlkZGVuKCkpIHtcbiAgICAgICBzYmdudml6RXh0U3RyaW5nICs9IFwiPGhpZGRlbi8+XCI7XG4gICAgICAgaGFzTmV3dEV4dCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gYWRkIGluZm8gZm9yIG5vZGVzIHdoaWNoIGhhcyBoaWRkZW4gbmVpZ2hib3VyXG4gICAgaWYobm9kZS5kYXRhKFwidGhpY2tCb3JkZXJcIikpIHtcbiAgICAgICBzYmdudml6RXh0U3RyaW5nICs9IFwiPGhhc0hpZGRlbk5laWdoYm91ci8+XCI7XG4gICAgICAgaGFzTmV3dEV4dCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gYWRkIHN0cmluZyB0byBhIG5ldyBleHRlbnNpb24gZm9yIHRoaXMgZ2x5cGhcbiAgICBpZihoYXNOZXd0RXh0KSB7XG4gICAgICAgdmFyIGV4dGVuc2lvbiA9IHNlbGYuZ2V0T3JDcmVhdGVFeHRlbnNpb24oZ2x5cGgpO1xuICAgICAgIGV4dGVuc2lvbi5hZGQoXCI8c2JnbnZpej5cIitzYmdudml6RXh0U3RyaW5nK1wiPC9zYmdudml6PlwiKTtcbiAgICB9XG5cbiAgICAvLyBjdXJyZW50IGdseXBoIGlzIGRvbmVcbiAgICBnbHlwaExpc3QucHVzaChnbHlwaCk7XG5cbiAgICAvLyBrZWVwIGdvaW5nIHdpdGggYWxsIHRoZSBpbmNsdWRlZCBnbHlwaHNcbiAgICBpZihub2RlQ2xhc3MgPT09IFwiY29tcGFydG1lbnRcIil7XG4gICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbigpO1xuICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4udW5pb24odGhpcy5hbGxDb2xsYXBzZWROb2Rlcyk7XG4gICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoXCJbcGFyZW50ID0gJ1wiKyBub2RlLmlkKCkgKyBcIiddXCIpXG4gICAgICAgY2hpbGRyZW4uZWFjaChmdW5jdGlvbihlbGUsIGkpe1xuICAgICAgICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgZWxlID0gaTtcbiAgICAgICAgICAgfVxuICAgICAgICAgICBnbHlwaExpc3QgPSBnbHlwaExpc3QuY29uY2F0KHNlbGYuZ2V0R2x5cGhTYmdubWwoZWxlLCB2ZXJzaW9uKSk7XG4gICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICBnbHlwaExpc3Q7XG4gIH07XG5cbiAgLy8gZWxlbWVudDogYSBsaWJzYmduLmpzIGdseXBoIG9yIGVkZ2Ugb2JqZWN0XG4gIGpzb25Ub1NiZ25tbC5nZXRPckNyZWF0ZUV4dGVuc2lvbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICAgIHZhciBleHRlbnNpb247XG4gICAgICBpZihlbGVtZW50LmV4dGVuc2lvbikgeyAvLyBhbiBleHRlbnNpb24gaXMgYWxyZWFkeSB0aGVyZSBmb3IgdGhpcyBlbGVtZW50XG4gICAgICAgICAgZXh0ZW5zaW9uID0gZWxlbWVudC5leHRlbnNpb247XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICBleHRlbnNpb24gPSBuZXcgbGlic2JnbmpzLkV4dGVuc2lvbigpO1xuICAgICAgICAgIGVsZW1lbnQuc2V0RXh0ZW5zaW9uKGV4dGVuc2lvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXh0ZW5zaW9uO1xuICB9O1xuXG4gIGpzb25Ub1NiZ25tbC5nZXRBcmNTYmdubWwgPSBmdW5jdGlvbihlZGdlLCB2ZXJzaW9uKXtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy9UZW1wb3JhcnkgaGFjayB0byByZXNvbHZlIFwidW5kZWZpbmVkXCIgYXJjIHNvdXJjZSBhbmQgdGFyZ2V0c1xuICAgIHZhciBhcmNUYXJnZXQgPSBlZGdlLl9wcml2YXRlLmRhdGEucG9ydHRhcmdldDtcbiAgICB2YXIgYXJjU291cmNlID0gZWRnZS5fcHJpdmF0ZS5kYXRhLnBvcnRzb3VyY2U7XG5cbiAgICBpZiAoYXJjU291cmNlID09IG51bGwgfHwgYXJjU291cmNlLmxlbmd0aCA9PT0gMClcbiAgICAgICBhcmNTb3VyY2UgPSBlZGdlLl9wcml2YXRlLmRhdGEuc291cmNlO1xuXG4gICAgaWYgKGFyY1RhcmdldCA9PSBudWxsIHx8IGFyY1RhcmdldC5sZW5ndGggPT09IDApXG4gICAgICAgYXJjVGFyZ2V0ID0gZWRnZS5fcHJpdmF0ZS5kYXRhLnRhcmdldDtcblxuICAgIHZhciBhcmNJZCA9IGVkZ2UuX3ByaXZhdGUuZGF0YS5pZDtcbiAgICB2YXIgYXJjID0gbmV3IGxpYnNiZ25qcy5BcmMoe2lkOiBhcmNJZCwgc291cmNlOiBhcmNTb3VyY2UsIHRhcmdldDogYXJjVGFyZ2V0LCBjbGFzc186IGVkZ2UuX3ByaXZhdGUuZGF0YS5jbGFzc30pO1xuXG4gICAgYXJjLnNldFN0YXJ0KG5ldyBsaWJzYmduanMuU3RhcnRUeXBlKHt4OiBlZGdlLl9wcml2YXRlLnJzY3JhdGNoLnN0YXJ0WCwgeTogZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaC5zdGFydFl9KSk7XG5cbiAgICAvLyBFeHBvcnQgYW5jaG9yIHBvaW50cyBpZiBlZGdlRWRpdGluZ0V4dGVuc2lvbiBpcyByZWdpc3RlcmVkXG4gICAgaWYgKGN5LmVkZ2VFZGl0aW5nICYmIGN5LmVkZ2VFZGl0aW5nKCdpbml0aWFsaXplZCcpKSB7XG4gICAgIHZhciBzZWdwdHMgPSBjeS5lZGdlRWRpdGluZygnZ2V0JykuZ2V0QW5jaG9yc0FzQXJyYXkoZWRnZSk7XG4gICAgIGlmKHR5cGVvZiBzZWdwdHMgIT09ICd1bmRlZmluZWQnKXtcbiAgICAgICBpZihzZWdwdHMubGVuZ3RoID4gMCl7XG4gICAgICAgIGZvcih2YXIgaSA9IDA7IHNlZ3B0cyAmJiBpIDwgc2VncHRzLmxlbmd0aDsgaSA9IGkgKyAyKXtcbiAgICAgICAgICB2YXIgYW5jaG9yWCA9IHNlZ3B0c1tpXTtcbiAgICAgICAgICB2YXIgYW5jaG9yWSA9IHNlZ3B0c1tpICsgMV07XG4gICAgICAgICAgYXJjLmFkZE5leHQobmV3IGxpYnNiZ25qcy5OZXh0VHlwZSh7eDogYW5jaG9yWCwgeTogYW5jaG9yWX0pKTtcbiAgICAgICAgfVxuICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cblxuICAgIGFyYy5zZXRFbmQobmV3IGxpYnNiZ25qcy5FbmRUeXBlKHt4OiBlZGdlLl9wcml2YXRlLnJzY3JhdGNoLmVuZFgsIHk6IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2guZW5kWX0pKTtcblxuICAgIHZhciBjYXJkaW5hbGl0eSA9IGVkZ2UuX3ByaXZhdGUuZGF0YS5jYXJkaW5hbGl0eTtcbiAgICBpZih0eXBlb2YgY2FyZGluYWxpdHkgIT0gJ3VuZGVmaW5lZCcgJiYgY2FyZGluYWxpdHkgIT0gbnVsbCAmJiBjYXJkaW5hbGl0eSAhPSAwKSB7XG4gICAgICB2YXIgZWRnZWJCb3ggPSBlZGdlLmJvdW5kaW5nQm94KHsgaW5jbHVkZUxhYmVsczogdHJ1ZSwgaW5jbHVkZU5vZGVzOiBmYWxzZSwgaW5jbHVkZUVkZ2VzOiBmYWxzZSwgaW5jbHVkZU92ZXJsYXlzOiBmYWxzZSB9KTtcbiAgICAgICBhcmMuYWRkR2x5cGgobmV3IGxpYnNiZ25qcy5HbHlwaCh7XG4gICAgICAgICAgIGlkOiBhcmMuaWQrJ19jYXJkJyxcbiAgICAgICAgICAgY2xhc3NfOiAnc3RvaWNoaW9tZXRyeScsXG4gICAgICAgICAgIGxhYmVsOiBuZXcgbGlic2JnbmpzLkxhYmVsKHt0ZXh0OiBjYXJkaW5hbGl0eX0pLFxuICAgICAgICAgICBiYm94OiBuZXcgbGlic2JnbmpzLkJib3goe3g6IGVkZ2ViQm94LngxLCB5OiBlZGdlYkJveC55MSwgdzogZWRnZWJCb3gudywgaDogZWRnZWJCb3guaH0pIC8vIGR1bW15IGJib3gsIG5lZWRlZCBmb3IgZm9ybWF0IGNvbXBsaWFuY2VcbiAgICAgICB9KSk7XG4gICAgfVxuICAgIC8vIGNoZWNrIGZvciBhbm5vdGF0aW9uc1xuICAgIGlmIChlZGdlLmRhdGEoJ2Fubm90YXRpb25zJykgJiYgISQuaXNFbXB0eU9iamVjdChlZGdlLmRhdGEoJ2Fubm90YXRpb25zJykpKSB7XG4gICAgICAgdmFyIGV4dGVuc2lvbiA9IHNlbGYuZ2V0T3JDcmVhdGVFeHRlbnNpb24oYXJjKTtcbiAgICAgICB2YXIgYW5ub3RFeHQgPSB0aGlzLmdldEFubm90YXRpb25FeHRlbnNpb24oZWRnZSk7XG4gICAgICAgZXh0ZW5zaW9uLmFkZChhbm5vdEV4dCk7XG4gICAgfVxuXG4gICAgLy8gYWRkIGluZm8gZm9yIGhpZGRlbiBlZGdlc1xuICAgIGlmKGVkZ2UuaGlkZGVuKCkpIHtcbiAgICAgICB2YXIgZXh0ZW5zaW9uID0gc2VsZi5nZXRPckNyZWF0ZUV4dGVuc2lvbihhcmMpO1xuICAgICAgIGV4dGVuc2lvbi5hZGQoXCI8c2JnbnZpej48aGlkZGVuLz48L3NiZ252aXo+XCIpO1xuICAgIH1cblxuICAgIC8vIGFkZCBpbmZvIGFib3V0IGVkZ2UgdHlwZVxuICAgIC8vIHNpbmNlIGN1cnZlIHN0eWxlIGlzIG5vdCBzdGFuZGFyZCB3ZSBzaG91bGRuJ3QgaGF2ZSBpdCBmb3IgZWl0aGVyIHZlcnNpb25cbiAgICBpZiAoZWRnZS5jc3MoJ2N1cnZlLXN0eWxlJykgJiYgdmVyc2lvbiAhPT0gXCJwbGFpblwiICYmIHZlcnNpb24gIT09IFwicGxhaW4zXCIpIHtcbiAgICAgIHZhciBleHRlbnNpb24gPSBzZWxmLmdldE9yQ3JlYXRlRXh0ZW5zaW9uKGFyYyk7XG4gICAgICBleHRlbnNpb24uYWRkKFwiPGN1cnZlU3R5bGU+XCIgKyBlZGdlLmNzcygnY3VydmUtc3R5bGUnKSArIFwiPC9jdXJ2ZVN0eWxlPlwiKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGVkZ2UuZGF0YSgnc2lmLW1ldGEnKSAmJiB2ZXJzaW9uICE9PSBcInBsYWluXCIgJiYgdmVyc2lvbiAhPT0gXCJwbGFpbjNcIikge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IHNlbGYuZ2V0T3JDcmVhdGVFeHRlbnNpb24oYXJjKTtcbiAgICAgIGV4dGVuc2lvbi5hZGQoXCI8c2lmTWV0YUVkZ2U+dHJ1ZTwvc2lmTWV0YUVkZ2U+XCIpO1xuICAgIH1cblxuICAgIHJldHVybiBhcmM7XG4gIH07XG5cbiAganNvblRvU2Jnbm1sLmFkZEdseXBoQmJveCA9IGZ1bmN0aW9uKG5vZGUpe1xuICAgIFxuICAgIHZhciBwYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gICAgdmFyIGJvcmRlcldpZHRoID0gTnVtYmVyKG5vZGUuY3NzKFwiYm9yZGVyLXdpZHRoXCIpLnJlcGxhY2UoXCJweFwiLFwiXCIpKTtcbiAgICB2YXIgX2NsYXNzID0gbm9kZS5kYXRhKCdjbGFzcycpO1xuICAgIHZhciB3aWR0aCA9IG5vZGUub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGggO1xuICAgIHZhciBoZWlnaHQgPSBub2RlLm91dGVySGVpZ2h0KCkgLSBib3JkZXJXaWR0aDtcbiAgICAvLyBJZiB0aGUgbm9kZSBjYW4gaGF2ZSBwb3J0cyBhbmQgaXQgaGFzIGV4YWN0bHkgMiBwb3J0cyB0aGVuIGl0IGlzIHJlcHJlc2VudGVkIGJ5IGEgYmlnZ2VyIGJib3guXG4gICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIHJlcHJlc2VudCBpdCBhcyBhIHBvbHlnb24gYW5kIHNvIHRoZSB3aG9sZSBzaGFwZSBpbmNsdWRpbmcgdGhlIHBvcnRzIGFyZSByZW5kZXJlZCBpbiB0aGUgbm9kZSBiYm94LlxuICAgIGlmIChlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVQb3J0cyhfY2xhc3MpKSB7XG4gICAgICBpZiAobm9kZS5kYXRhKCdwb3J0cycpLmxlbmd0aCA9PT0gMikge1xuICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBwb3J0cyBhcmUgc3ltbWV0cmljIHRvIHRoZSBub2RlIGNlbnRlciBzbyB1c2luZyBqdXN0IG9uZSBvZiB0aGUgcG9ydHMgaXMgZW5vdWdoXG4gICAgICAgdmFyIHBvcnQgPSBub2RlLmRhdGEoJ3BvcnRzJylbMF07XG4gICAgICAgdmFyIG9yaWVudGF0aW9uID0gcG9ydC54ID09PSAwID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICAgICAvLyBUaGlzIGlzIHRoZSByYXRpbyBvZiB0aGUgYXJlYSBvY2N1cGllZCB3aXRoIHBvcnRzIG92ZXIgd2l0aG91dCBwb3J0c1xuICAgICAgIHZhciByYXRpbyA9IG9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gTWF0aC5hYnMocG9ydC55KSAvIDUwIDogTWF0aC5hYnMocG9ydC54KSAvIDUwO1xuICAgICAgIC8vIERpdmlkZSB0aGUgYmJveCB0byB0aGUgY2FsY3VsYXRlZCByYXRpbyB0byBnZXQgdGhlIGJib3ggb2YgdGhlIGFjdHVhbCBzaGFwZSBkaXNjbHVkaW5nIHRoZSBwb3J0c1xuICAgICAgIHdpZHRoIC89IHJhdGlvO1xuICAgICAgIGhlaWdodCAvPSByYXRpbztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgeCA9IG5vZGUucG9zaXRpb24oKS54IC0gd2lkdGgvMjtcbiAgICB2YXIgeSA9IG5vZGUucG9zaXRpb24oKS55LSBoZWlnaHQvMjtcbiAgICAvL3ZhciB4ID1ub2RlLl9wcml2YXRlLnBvc2l0aW9uLnggLSB3aWR0aC8yIC0gcGFkZGluZzsgICAgXG4gICAgLy92YXIgeSA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueSAtIGhlaWdodC8yIC0gcGFkZGluZztcbiAgICAvL3ZhciB4ID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi54IC0gd2lkdGgvMjtcbiAgICAvL3ZhciB5ID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi55IC0gaGVpZ2h0LzI7XG5cbiAgICByZXR1cm4gbmV3IGxpYnNiZ25qcy5CYm94KHt4OiB4LCB5OiB5LCB3OiB3aWR0aCwgaDogaGVpZ2h0fSk7XG4gIH07XG5cbiAganNvblRvU2Jnbm1sLmFkZFN0YXRlQW5kSW5mb0Jib3ggPSBmdW5jdGlvbihub2RlLCBib3hHbHlwaCl7XG4gICAgICBib3hCYm94ID0gYm94R2x5cGguYmJveDtcbiAgICAgIHZhciBib3JkZXJXaWR0aCA9IG5vZGUuZGF0YSgpWydib3JkZXItd2lkdGgnXTtcbiAgICAgIHZhciBwYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gICAgICB2YXIgeCA9ICgoYm94QmJveC54ICogKG5vZGUub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGgpKSAvIDEwMCkgKyAobm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi54IC0gbm9kZS53aWR0aCgpLzIgLSBwYWRkaW5nIC0gYm94QmJveC53LzIpO1xuICAgICAgdmFyIHkgPSAoKGJveEJib3gueSAqIChub2RlLm91dGVySGVpZ2h0KCkgLSBib3JkZXJXaWR0aCkpIC8gMTAwKSArIChub2RlLl9wcml2YXRlLnBvc2l0aW9uLnkgLSBub2RlLmhlaWdodCgpLzIgLSBwYWRkaW5nIC0gYm94QmJveC5oLzIpO1xuICAgICAgLy92YXIgeCA9IGJveEJib3gueCAvIDEwMCAqIG5vZGUud2lkdGgoKTtcbiAgICAgIC8vdmFyIHkgPSBib3hCYm94LnkgLyAxMDAgKiBub2RlLmhlaWdodCgpO1xuXG4gICAgICAvL3ggPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLnggLSBub2RlLndpZHRoKCkvMiArICh4IC0gYm94QmJveC53LzIpO1xuICAgICAgLy95ID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi55IC0gbm9kZS5oZWlnaHQoKS8yICsgKHkgLSBib3hCYm94LmgvMik7XG4gICAgICBcbiAgICAgIHJldHVybiBuZXcgbGlic2JnbmpzLkJib3goe3g6IHgsIHk6IHksIHc6IGJveEJib3gudywgaDogYm94QmJveC5ofSk7XG4gIH07XG5cbiAganNvblRvU2Jnbm1sLmFkZFN0YXRlQm94R2x5cGggPSBmdW5jdGlvbihub2RlLCBpZCwgbWFpbkdseXBoKXtcblxuICAgICAgdmFyIGdseXBoID0gbmV3IGxpYnNiZ25qcy5HbHlwaCh7aWQ6IGlkLCBjbGFzc186ICdzdGF0ZSB2YXJpYWJsZSd9KTtcbiAgICAgIHZhciBzdGF0ZSA9IG5ldyBsaWJzYmduanMuU3RhdGVUeXBlKCk7XG4gICAgICBpZih0eXBlb2Ygbm9kZS5zdGF0ZS52YWx1ZSAhPSAndW5kZWZpbmVkJylcbiAgICAgICAgICBzdGF0ZS52YWx1ZSA9IG5vZGUuc3RhdGUudmFsdWU7XG4gICAgICBpZih0eXBlb2Ygbm9kZS5zdGF0ZS52YXJpYWJsZSAhPSAndW5kZWZpbmVkJylcbiAgICAgICAgICBzdGF0ZS52YXJpYWJsZSA9IG5vZGUuc3RhdGUudmFyaWFibGU7XG4gICAgICBnbHlwaC5zZXRTdGF0ZShzdGF0ZSk7XG4gICAgICBnbHlwaC5zZXRCYm94KHRoaXMuYWRkU3RhdGVBbmRJbmZvQmJveChtYWluR2x5cGgsIG5vZGUpKTtcblxuICAgICAgcmV0dXJuIGdseXBoO1xuICB9O1xuXG4gIGpzb25Ub1NiZ25tbC5hZGRJbmZvQm94R2x5cGggPSBmdW5jdGlvbiAobm9kZSwgaWQsIG1haW5HbHlwaCkge1xuICAgICAgdmFyIGdseXBoID0gbmV3IGxpYnNiZ25qcy5HbHlwaCh7aWQ6IGlkLCBjbGFzc186ICd1bml0IG9mIGluZm9ybWF0aW9uJ30pO1xuICAgICAgdmFyIGxhYmVsID0gbmV3IGxpYnNiZ25qcy5MYWJlbCgpO1xuICAgICAgaWYodHlwZW9mIG5vZGUubGFiZWwudGV4dCAhPSAndW5kZWZpbmVkJylcbiAgICAgICAgICBsYWJlbC50ZXh0ID0gbm9kZS5sYWJlbC50ZXh0O1xuICAgICAgZ2x5cGguc2V0TGFiZWwobGFiZWwpO1xuICAgICAgZ2x5cGguc2V0QmJveCh0aGlzLmFkZFN0YXRlQW5kSW5mb0Jib3gobWFpbkdseXBoLCBub2RlKSk7XG5cbiAgICAgIC8vIGFzc2lnbiBjb3JyZWN0IGVudGl0eSB0YWcgZm9yIEFGIGNhc2VcbiAgICAgIHZhciBlbnRpdHlOYW1lID0gbnVsbDtcbiAgICAgIHN3aXRjaChtYWluR2x5cGguX3ByaXZhdGUuZGF0YS5jbGFzcykge1xuICAgICAgICAgIGNhc2UgJ0JBIHVuc3BlY2lmaWVkIGVudGl0eSc6ICAgZW50aXR5TmFtZSA9IFwidW5zcGVjaWZpZWQgZW50aXR5XCI7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0JBIHNpbXBsZSBjaGVtaWNhbCc6ICAgICAgZW50aXR5TmFtZSA9IFwic2ltcGxlIGNoZW1pY2FsXCI7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0JBIG1hY3JvbW9sZWN1bGUnOiAgICAgICAgZW50aXR5TmFtZSA9IFwibWFjcm9tb2xlY3VsZVwiOyBicmVhaztcbiAgICAgICAgICBjYXNlICdCQSBudWNsZWljIGFjaWQgZmVhdHVyZSc6IGVudGl0eU5hbWUgPSBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0JBIHBlcnR1cmJpbmcgYWdlbnQnOiAgICAgZW50aXR5TmFtZSA9IFwicGVydHVyYmF0aW9uXCI7IGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0JBIGNvbXBsZXgnOiAgICAgICAgICAgICAgZW50aXR5TmFtZSA9IFwiY29tcGxleFwiOyBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIGVudGl0eSB0YWcgYXJlbid0IGFsd2F5cyB0aGVyZSwgb25seSBmb3IgQUZcbiAgICAgIC8vIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGtlZXAgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdW5rbm93biBtYXAgdHlwZVxuICAgICAgaWYoZW50aXR5TmFtZSkge1xuICAgICAgICAgIGdseXBoLnNldEVudGl0eShuZXcgbGlic2JnbmpzLkVudGl0eVR5cGUoe25hbWU6IGVudGl0eU5hbWV9KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnbHlwaDtcbiAgfTtcblxuICBqc29uVG9TYmdubWwuY2hpbGRPZk5vbmUgPSBmdW5jdGlvbihlbGUsIG5vZGVzKSB7XG4gICAgcmV0dXJuICFlbGUuaXNDaGlsZCgpIHx8IG5vZGVzLmdldEVsZW1lbnRCeUlkKGVsZS5kYXRhKCdwYXJlbnQnKSkubGVuZ3RoID09PSAwO1xuICB9O1xuXG4gIHJldHVybiBqc29uVG9TYmdubWw7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgZWxlbWVudFV0aWxpdGllcywgY3k7XG5cbiAgZnVuY3Rpb24ganNvblRvU2lmKHBhcmFtKSB7XG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNWYWxpZEVuZChub2RlKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZOb2RlKCBub2RlICkgfHwgbm9kZS5kYXRhKCdjbGFzcycpID09ICd0b3BvbG9neSBncm91cCc7XG4gIH1cblxuICBqc29uVG9TaWYuY29udmVydCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsaW5lcyA9IFtdO1xuXG4gICAgdmFyIGVkZ2VzID0gY3kuZWRnZXMoKS5maWx0ZXIoIGZ1bmN0aW9uKCBlZGdlICkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZFZGdlKCBlZGdlIClcbiAgICAgICAgJiYgaXNWYWxpZEVuZCggZWRnZS5zb3VyY2UoKSApXG4gICAgICAgICYmIGlzVmFsaWRFbmQoIGVkZ2UudGFyZ2V0KCkgKTtcbiAgICB9ICk7XG5cbiAgICB2YXIgbm9kZXMgPSBjeS5ub2RlcygpLmZpbHRlciggZnVuY3Rpb24oIG5vZGUgKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5pc1NJRk5vZGUoIG5vZGUgKTtcbiAgICB9ICk7XG5cbiAgICBub2RlcyA9IG5vZGVzLm5vdCggZWRnZXMuY29ubmVjdGVkTm9kZXMoKSApO1xuXG4gICAgdmFyIHNldFRvU3RyID0gZnVuY3Rpb24oc2V0KSB7XG4gICAgICBpZiAoIXNldCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzZXQpLmpvaW4oJzsnKTtcbiAgICB9O1xuXG4gICAgdmFyIGdldExhYmVsID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuZGF0YSgnbGFiZWwnKTtcbiAgICB9O1xuXG4gICAgdmFyIGlzVmFsaWRMYWJlbCA9IGZ1bmN0aW9uKGxhYmVsKXtcbiAgICAgIHJldHVybiAhIWxhYmVsO1xuICAgIH1cblxuICAgIGVkZ2VzLmZvckVhY2goIGZ1bmN0aW9uKCBlZGdlICkge1xuICAgICAgdmFyIHNyY05hbWVzLCB0Z3ROYW1lcztcblxuICAgICAgdmFyIGdldE5hbWVzID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgICB2YXIgbmFtZXM7XG5cbiAgICAgICAgaWYgKG5vZGUuaXNQYXJlbnQoKSkge1xuICAgICAgICAgIG5hbWVzID0gIG5vZGUuY2hpbGRyZW4oKS5tYXAoIGdldExhYmVsICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBuYW1lcyA9IFsgZ2V0TGFiZWwobm9kZSkgXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuYW1lcyAmJiBuYW1lcy5maWx0ZXIoIGlzVmFsaWRMYWJlbCApO1xuICAgICAgfTtcblxuICAgICAgdmFyIHNyY05hbWVzID0gZ2V0TmFtZXMoZWRnZS5zb3VyY2UoKSk7XG4gICAgICB2YXIgdGd0TmFtZXMgPSBnZXROYW1lcyhlZGdlLnRhcmdldCgpKTtcblxuICAgICAgaWYgKCAhc3JjTmFtZXMgfHwgIXRndE5hbWVzIHx8IHNyY05hbWVzLmxlbmd0aCA9PSAwIHx8IHRndE5hbWVzLmxlbmd0aCA9PSAwICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB0eXBlID0gZWRnZS5kYXRhKCdjbGFzcycpO1xuICAgICAgdmFyIHBjSURTZXQgPSBlZGdlLmRhdGEoJ3BjSURTZXQnKTtcbiAgICAgIHZhciBzaXRlTG9jU2V0ID0gZWRnZS5kYXRhKCdzaXRlTG9jU2V0Jyk7XG4gICAgICB2YXIgcGNJRHMgPSBzZXRUb1N0ciggcGNJRFNldCApO1xuICAgICAgdmFyIHNpdGVMb2NhdGlvbnMgPSBzZXRUb1N0ciggc2l0ZUxvY1NldCApO1xuXG4gICAgICBzcmNOYW1lcy5mb3JFYWNoKCBzcmNOYW1lID0+IHtcbiAgICAgICAgdGd0TmFtZXMuZm9yRWFjaCggdGd0TmFtZSA9PiB7XG4gICAgICAgICAgdmFyIGxpbmUgPSBbIHNyY05hbWUsIHR5cGUsIHRndE5hbWUsIHBjSURzLCBzaXRlTG9jYXRpb25zIF0uam9pbiggJ1xcdCcgKTtcbiAgICAgICAgICBsaW5lcy5wdXNoKCBsaW5lICk7XG4gICAgICAgIH0gKTtcbiAgICAgIH0gKTtcbiAgICB9ICk7XG5cbiAgICBub2Rlcy5mb3JFYWNoKCBmdW5jdGlvbiggbm9kZSApIHtcbiAgICAgIHZhciBsYWJlbCA9IGdldExhYmVsKCBub2RlICk7XG5cbiAgICAgIGlmICggbGFiZWwgKSB7XG4gICAgICAgIGxpbmVzLnB1c2goIGxhYmVsICk7XG4gICAgICB9XG4gICAgfSApO1xuXG4gICAgdmFyIHRleHQgPSBsaW5lcy5qb2luKCAnXFxuJyApO1xuICAgIHJldHVybiB0ZXh0O1xuICB9O1xuXG4gIHJldHVybiBqc29uVG9TaWY7XG59O1xuIiwiLypcbiAqIExpc3RlbiBkb2N1bWVudCBmb3Iga2V5Ym9hcmQgaW5wdXRzIGFuZCBleHBvcnRzIHRoZSB1dGlsaXRpZXMgdGhhdCBpdCBtYWtlcyB1c2Ugb2ZcbiAqL1xuXG52YXIgbGliVXRpbGl0aWVzID0gcmVxdWlyZSgnLi9saWItdXRpbGl0aWVzJyk7XG52YXIgbGlicyA9IGxpYlV0aWxpdGllcy5nZXRMaWJzKCk7XG52YXIgalF1ZXJ5ID0gJCA9IGxpYnMualF1ZXJ5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBrZXlib2FyZElucHV0VXRpbGl0aWVzIChwYXJhbSkge1xuXG4gICAgLy8gTGlzdGVuIHRvIGV2ZW50cyBvbiBuZXR3b3JrIGNvbnRhaW5lclxuICAgICQoZG9jdW1lbnQpLm9uKCdrZXlkb3duJywgJy5pbnRlZ2VyLWlucHV0JywgZnVuY3Rpb24oZSl7XG4gICAgICB2YXIgdmFsdWUgPSAkKHRoaXMpLmF0dHIoJ3ZhbHVlJyk7XG4gICAgICByZXR1cm4ga2V5Ym9hcmRJbnB1dFV0aWxpdGllcy5pc0ludGVnZXJGaWVsZElucHV0KHZhbHVlLCBlKTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdrZXlkb3duJywgJy5mbG9hdC1pbnB1dCcsIGZ1bmN0aW9uKGUpe1xuICAgICAgdmFyIHZhbHVlID0gJCh0aGlzKS5hdHRyKCd2YWx1ZScpO1xuICAgICAgcmV0dXJuIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNGbG9hdEZpZWxkSW5wdXQodmFsdWUsIGUpO1xuICAgIH0pO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsICcuaW50ZWdlci1pbnB1dCwuZmxvYXQtaW5wdXQnLCBmdW5jdGlvbihlKXtcbiAgICAgIHZhciBtaW4gICA9ICQodGhpcykuYXR0cignbWluJyk7XG4gICAgICB2YXIgbWF4ICAgPSAkKHRoaXMpLmF0dHIoJ21heCcpO1xuICAgICAgdmFyIHZhbHVlID0gcGFyc2VGbG9hdCgkKHRoaXMpLnZhbCgpKTtcblxuICAgICAgaWYobWluICE9IG51bGwpIHtcbiAgICAgICAgbWluID0gcGFyc2VGbG9hdChtaW4pO1xuICAgICAgfVxuXG4gICAgICBpZihtYXggIT0gbnVsbCkge1xuICAgICAgICBtYXggPSBwYXJzZUZsb2F0KG1heCk7XG4gICAgICB9XG5cbiAgICAgIGlmKG1pbiAhPSBudWxsICYmIHZhbHVlIDwgbWluKSB7XG4gICAgICAgIHZhbHVlID0gbWluO1xuICAgICAgfVxuICAgICAgZWxzZSBpZihtYXggIT0gbnVsbCAmJiB2YWx1ZSA+IG1heCkge1xuICAgICAgICB2YWx1ZSA9IG1heDtcbiAgICAgIH1cblxuICAgICAgaWYoaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIGlmKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsdWUgPSBtaW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbHVlID0gbWF4O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAkKHRoaXMpLnZhbChcIlwiICsgdmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAga2V5Ym9hcmRJbnB1dFV0aWxpdGllcy5pc051bWJlcktleSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gKCBlLmtleUNvZGUgPj0gNDggJiYgZS5rZXlDb2RlIDw9IDU3ICkgfHwgKCBlLmtleUNvZGUgPj0gOTYgJiYgZS5rZXlDb2RlIDw9IDEwNSApO1xuICB9O1xuXG4gIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNEb3RLZXkgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGUua2V5Q29kZSA9PT0gMTkwO1xuICB9O1xuXG4gIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNNaW51c1NpZ25LZXkgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGUua2V5Q29kZSA9PT0gMTA5IHx8IGUua2V5Q29kZSA9PT0gMTg5O1xuICB9O1xuXG4gIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNMZWZ0S2V5ID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBlLmtleUNvZGUgPT09IDM3O1xuICB9O1xuXG4gIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNSaWdodEtleSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZS5rZXlDb2RlID09PSAzOTtcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzQmFja3NwYWNlS2V5ID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBlLmtleUNvZGUgPT09IDg7XG4gIH07XG5cbiAga2V5Ym9hcmRJbnB1dFV0aWxpdGllcy5pc1RhYktleSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZS5rZXlDb2RlID09PSA5O1xuICB9O1xuXG4gIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNFbnRlcktleSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZS5rZXlDb2RlID09PSAxMztcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzSW50ZWdlckZpZWxkSW5wdXQgPSBmdW5jdGlvbih2YWx1ZSwgZSkge1xuICAgIHJldHVybiB0aGlzLmlzQ3RybE9yQ29tbWFuZFByZXNzZWQoZSkgfHwgdGhpcy5pc01pbnVzU2lnbktleShlKSB8fCB0aGlzLmlzTnVtYmVyS2V5KGUpXG4gICAgICAgICAgICB8fCB0aGlzLmlzQmFja3NwYWNlS2V5KGUpIHx8IHRoaXMuaXNUYWJLZXkoZSkgfHwgdGhpcy5pc0xlZnRLZXkoZSkgfHwgdGhpcy5pc1JpZ2h0S2V5KGUpIHx8IHRoaXMuaXNFbnRlcktleShlKTtcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzRmxvYXRGaWVsZElucHV0ID0gZnVuY3Rpb24odmFsdWUsIGUpIHtcbiAgICByZXR1cm4gdGhpcy5pc0ludGVnZXJGaWVsZElucHV0KHZhbHVlLCBlKSB8fCB0aGlzLmlzRG90S2V5KGUpO1xuICB9O1xuXG4gIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNDdHJsT3JDb21tYW5kUHJlc3NlZCA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZS5jdHJsS2V5IHx8IGUubWV0YUtleTtcbiAgfTtcblxuICByZXR1cm4ga2V5Ym9hcmRJbnB1dFV0aWxpdGllcztcbn07XG4iLCJ2YXIgdGRQYXJzZXIgPSByZXF1aXJlKCcuL3RhYi1kZWxpbWV0ZWQtcGFyc2VyJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjeSwgbWFpblV0aWxpdGllcztcblxuICBmdW5jdGlvbiBsYXlvdXRMb2FkZXIoIHBhcmFtICkge1xuICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgICBtYWluVXRpbGl0aWVzID0gcGFyYW0ubWFpblV0aWxpdGllcztcbiAgfVxuXG4gIGxheW91dExvYWRlci5sb2FkID0gZnVuY3Rpb24oIGxheW91dFRleHQsIGJ5TmFtZSApIHtcbiAgICB2YXIgbGluZXMgPSB0ZFBhcnNlci5nZXRMaW5lc0FycmF5KCBsYXlvdXRUZXh0ICk7XG4gICAgdmFyIHBvc01hcCA9IHt9O1xuXG4gICAgbGluZXMuZm9yRWFjaCggZnVuY3Rpb24oIGxpbmUgKSB7XG4gICAgICB2YXIgdGFicyA9IHRkUGFyc2VyLmdldFRhYnNBcnJheSggbGluZSApO1xuXG4gICAgICB2YXIgbm9kZUlkO1xuXG4gICAgICBpZiAoIGJ5TmFtZSApIHtcbiAgICAgICAgdmFyIG1hdGNoaW5nTm9kZXMgPSBsYXlvdXRMb2FkZXIuZ2V0Tm9kZXNCeU5hbWUoIHRhYnNbIDAgXSApO1xuICAgICAgICBpZiAoIG1hdGNoaW5nTm9kZXMubGVuZ3RoID09PSAwICkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlkZWFsbHkgdGhlcmUgaXMgb25seSBvbmUgbWF0Y2hpbmcgbm9kZVxuICAgICAgICAvLyB1c2UgdGhlIGZpcnN0IG9uZSBpbiBhbnkgY2FzZVxuICAgICAgICBub2RlSWQgPSBtYXRjaGluZ05vZGVzLmlkKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbm9kZUlkID0gdGFic1sgMCBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgcG9zWCA9IHBhcnNlRmxvYXQoIHRhYnNbIDEgXSApO1xuICAgICAgdmFyIHBvc1kgPSBwYXJzZUZsb2F0KCB0YWJzWyAyIF0gKTtcblxuICAgICAgcG9zTWFwWyBub2RlSWQgXSA9IHsgeDogcG9zWCwgeTogcG9zWSB9O1xuICAgIH0gKTtcblxuICAgIHZhciBvcHRpb25zID0ge1xuICAgICAgbmFtZTogJ3ByZXNldCcsXG4gICAgICBwb3NpdGlvbnM6IHBvc01hcCxcbiAgICAgIGZpdDogZmFsc2VcbiAgICB9O1xuXG4gICAgbWFpblV0aWxpdGllcy5wZXJmb3JtTGF5b3V0KCBvcHRpb25zICk7XG4gIH07XG5cbiAgbGF5b3V0TG9hZGVyLmdldE5vZGVzQnlOYW1lID0gZnVuY3Rpb24oIG5hbWUgKSB7XG4gICAgcmV0dXJuIGN5Lm5vZGVzKCkuZmlsdGVyKCAnW2xhYmVsPVwiJyArIG5hbWUgKyAnXCJdJyApO1xuICB9O1xuXG4gIHJldHVybiBsYXlvdXRMb2FkZXI7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGN5O1xuXG4gIGZ1bmN0aW9uIGxheW91dFRvVGV4dCggcGFyYW0gKSB7XG4gICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICB9XG5cbiAgbGF5b3V0VG9UZXh0LmNvbnZlcnQgPSBmdW5jdGlvbiggYnlOYW1lICkge1xuICAgIHZhciBub2RlcyA9IGN5Lm5vZGVzKCk7XG4gICAgdmFyIGxpbmVzID0gW107XG5cbiAgICBub2Rlcy5tYXAoIGZ1bmN0aW9uKCBub2RlICkge1xuICAgICAgdmFyIGlkT3JOYW1lID0gYnlOYW1lID8gbm9kZS5kYXRhKCdsYWJlbCcpIDogbm9kZS5pZCgpO1xuICAgICAgdmFyIHBvc1ggPSBub2RlLnBvc2l0aW9uKCd4Jyk7XG4gICAgICB2YXIgcG9zWSA9IG5vZGUucG9zaXRpb24oJ3knKTtcblxuICAgICAgdmFyIGxpbmUgPSBbIGlkT3JOYW1lLCBwb3NYLCBwb3NZIF0uam9pbiggJ1xcdCcgKTtcbiAgICAgIGxpbmVzLnB1c2goIGxpbmUgKTtcbiAgICB9ICk7XG5cbiAgICB2YXIgdGV4dCA9IGxpbmVzLmpvaW4oICdcXG4nICk7XG4gICAgcmV0dXJuIHRleHQ7XG4gIH07XG5cbiAgcmV0dXJuIGxheW91dFRvVGV4dDtcbn07XG4iLCIvKiBcbiAqIFV0aWxpdHkgZmlsZSB0byBnZXQgYW5kIHNldCB0aGUgbGlicmFyaWVzIHRvIHdoaWNoIHNiZ252aXogaXMgZGVwZW5kZW50IGZyb20gYW55IGZpbGUuXG4gKi9cblxudmFyIGxpYlV0aWxpdGllcyA9IGZ1bmN0aW9uKCl7XG59O1xuXG5saWJVdGlsaXRpZXMuc2V0TGlicyA9IGZ1bmN0aW9uKGxpYnMpIHtcbiAgdGhpcy5saWJzID0gbGlicztcbn07XG5cbmxpYlV0aWxpdGllcy5nZXRMaWJzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmxpYnM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxpYlV0aWxpdGllcztcblxuIiwiLypcbiAqIFRoZXNlIGFyZSB0aGUgbWFpbiB1dGlsaXRpZXMgdG8gYmUgZGlyZWN0bHkgdXRpbGl6ZWQgYnkgdGhlIHVzZXIgaW50ZXJhY3Rpb25zLlxuICogSWRlYWx5LCB0aGlzIGZpbGUgaXMganVzdCByZXF1aXJlZCBieSBpbmRleC5qc1xuICovXG5cbnZhciBsaWJVdGlsaXRpZXMgPSByZXF1aXJlKCcuL2xpYi11dGlsaXRpZXMnKTtcbnZhciBsaWJzID0gbGliVXRpbGl0aWVzLmdldExpYnMoKTtcbnZhciBqUXVlcnkgPSAkID0gbGlicy5qUXVlcnk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlbWVudFV0aWxpdGllcywganNvblRvU2Jnbm1sLCBzYmdubWxUb0pzb24sIHRkVG9Kc29uLCBud3RUb0pzb24sXG4gICAgICBzaWZUb0pzb24sIG9wdGlvblV0aWxpdGllcywgZ3JhcGhVdGlsaXRpZXMsIGxheW91dExvYWRlciwganNvblRvTnd0O1xuICB2YXIgY3ksIG9wdGlvbnM7XG5cbiAgZnVuY3Rpb24gbWFpblV0aWxpdGllcyAocGFyYW0pIHtcbiAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgICBqc29uVG9TYmdubWwgPSBwYXJhbS5qc29uVG9TYmdubWxDb252ZXJ0ZXI7XG4gICAganNvblRvTnd0ID0gcGFyYW0uanNvblRvTnd0Q29udmVydGVyO1xuICAgIHNiZ25tbFRvSnNvbiA9IHBhcmFtLnNiZ25tbFRvSnNvbkNvbnZlcnRlcjtcbiAgICBud3RUb0pzb24gPSBwYXJhbS5ud3RUb0pzb25Db252ZXJ0ZXI7XG4gICAgdGRUb0pzb24gPSBwYXJhbS50ZFRvSnNvbkNvbnZlcnRlcjtcbiAgICBzaWZUb0pzb24gPSBwYXJhbS5zaWZUb0pzb25Db252ZXJ0ZXI7XG4gICAgb3B0aW9uVXRpbGl0aWVzID0gcGFyYW0ub3B0aW9uVXRpbGl0aWVzO1xuICAgIGdyYXBoVXRpbGl0aWVzID0gcGFyYW0uZ3JhcGhVdGlsaXRpZXM7XG4gICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICAgIGxheW91dExvYWRlciA9IHBhcmFtLmxheW91dExvYWRlcjtcbiAgICBsYXlvdXRUb1RleHQgPSBwYXJhbS5sYXlvdXRUb1RleHQ7XG5cbiAgICBvcHRpb25zID0gb3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiAgfVxuXG4gIG1haW5VdGlsaXRpZXMuYmVmb3JlUGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBwYXJlbnRzID0gY3kubm9kZXMoJzpwYXJlbnQnKTtcbiAgICB2YXIgZWRnZXMgPSBjeS5lZGdlcygpO1xuXG4gICAgY3kuc3RhcnRCYXRjaCgpO1xuXG4gICAgLy8gZ3JhcGhVdGlsaXRpZXMuZGlzYWJsZVBvcnRzKCk7XG5cbiAgICAvLyBUT0RPIGRvIHRoaXMgYnkgdXNpbmcgZXh0ZW5zaW9uIEFQSVxuICAgIC8vIHJlbW92ZXMgYWxsIGJlbmRwb2ludHMgZm9yIGFsbCBlZGdlcyBpbiBjeXRvc2NhcGUgaW5zdGFuY2VcbiAgICBmb3IodmFyIGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspe1xuICAgICAgdmFyIGVkZ2UgPSBlZGdlc1tpXTtcbiAgICAgIGVkZ2UucmVtb3ZlQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNiZW5kcG9pbnRzJyk7XG4gICAgICBlZGdlLnJlbW92ZUNsYXNzKCdlZGdlY29udHJvbGVkaXRpbmctaGFzY29udHJvbHBvaW50cycpO1xuICAgICAgZWRnZS5yZW1vdmVDbGFzcygnZWRnZWJlbmRlZGl0aW5nLWhhc211bHRpcGxlYmVuZHBvaW50cycpO1xuICAgICAgZWRnZS5yZW1vdmVDbGFzcygnZWRnZWNvbnRyb2xlZGl0aW5nLWhhc211bHRpcGxlY29udHJvbHBvaW50cycpO1xuICAgICAgZWRnZS5kYXRhKCdjeWVkZ2ViZW5kZWRpdGluZ0Rpc3RhbmNlcycsIFtdKTtcbiAgICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdXZWlnaHRzJywgW10pO1xuICAgICAgZWRnZS5kYXRhKCdjeWVkZ2Vjb250cm9sZWRpdGluZ0Rpc3RhbmNlcycsIFtdKTtcdFxuICAgICAgZWRnZS5kYXRhKCdjeWVkZ2Vjb250cm9sZWRpdGluZ1dlaWdodHMnLCBbXSk7XG4gICAgfVxuXG4gICAgcGFyZW50cy5yZW1vdmVEYXRhKCdtaW5XaWR0aCcpO1xuICAgIHBhcmVudHMucmVtb3ZlRGF0YSgnbWluSGVpZ2h0Jyk7XG4gICAgcGFyZW50cy5yZW1vdmVEYXRhKCdtaW5XaWR0aEJpYXNMZWZ0Jyk7XG4gICAgcGFyZW50cy5yZW1vdmVEYXRhKCdtaW5XaWR0aEJpYXNSaWdodCcpO1xuICAgIHBhcmVudHMucmVtb3ZlRGF0YSgnbWluSGVpZ2h0Qmlhc1RvcCcpO1xuICAgIHBhcmVudHMucmVtb3ZlRGF0YSgnbWluSGVpZ2h0Qmlhc0JvdHRvbScpO1xuXG4gICAgY3kuZW5kQmF0Y2goKTtcbiAgICBcbiAgICBpZihwYXJlbnRzLmxlbmd0aCA+IDApXG4gICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIC8vIEV4cGFuZCBnaXZlbiBub2Rlcy4gUmVxdWlyZXMgZXhwYW5kQ29sbGFwc2UgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLmV4cGFuZE5vZGVzID0gZnVuY3Rpb24obm9kZXMpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IGV4cGFuZENvbGxhcHNlIGFwaVxuICAgIHZhciBleHBhbmRDb2xsYXBzZSA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKTtcblxuICAgIHZhciBub2Rlc1RvRXhwYW5kID0gZXhwYW5kQ29sbGFwc2UuZXhwYW5kYWJsZU5vZGVzKG5vZGVzKTtcbiAgICBpZiAobm9kZXNUb0V4cGFuZC5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZihvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiZXhwYW5kXCIsIHtcbiAgICAgICAgbm9kZXM6IG5vZGVzVG9FeHBhbmQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBleHBhbmRDb2xsYXBzZS5leHBhbmQobm9kZXMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBDb2xsYXBzZSBnaXZlbiBub2Rlcy4gUmVxdWlyZXMgZXhwYW5kQ29sbGFwc2UgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLmNvbGxhcHNlTm9kZXMgPSBmdW5jdGlvbihub2Rlcykge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgZXhwYW5kQ29sbGFwc2UgYXBpXG4gICAgdmFyIGV4cGFuZENvbGxhcHNlID0gY3kuZXhwYW5kQ29sbGFwc2UoJ2dldCcpO1xuXG4gICAgaWYgKGV4cGFuZENvbGxhcHNlLmNvbGxhcHNpYmxlTm9kZXMobm9kZXMpLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNvbGxhcHNlXCIsIHtcbiAgICAgICAgbm9kZXM6IG5vZGVzXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBleHBhbmRDb2xsYXBzZS5jb2xsYXBzZShub2Rlcyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENvbGxhcHNlIGFsbCBjb21wbGV4ZXMgcmVjdXJzaXZlbHkuIFJlcXVpcmVzIGV4cGFuZENvbGxhcHNlIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5jb2xsYXBzZUNvbXBsZXhlcyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgZXhwYW5kQ29sbGFwc2UgYXBpXG4gICAgdmFyIGV4cGFuZENvbGxhcHNlID0gY3kuZXhwYW5kQ29sbGFwc2UoJ2dldCcpO1xuXG4gICAgdmFyIGNvbXBsZXhlcyA9IGN5Lm5vZGVzKFwiW2NsYXNzXj0nY29tcGxleCddXCIpO1xuICAgIGlmIChleHBhbmRDb2xsYXBzZS5jb2xsYXBzaWJsZU5vZGVzKGNvbXBsZXhlcykubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNvbGxhcHNlUmVjdXJzaXZlbHlcIiwge1xuICAgICAgICBub2RlczogY29tcGxleGVzXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBleHBhbmRDb2xsYXBzZS5jb2xsYXBzZVJlY3Vyc2l2ZWx5KGNvbXBsZXhlcyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEV4cGFuZCBhbGwgY29tcGxleGVzIHJlY3Vyc2l2ZWx5LiBSZXF1aXJlcyBleHBhbmRDb2xsYXBzZSBleHRlbnNpb24gYW5kIGNvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuZXhwYW5kQ29tcGxleGVzID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBleHBhbmRDb2xsYXBzZSBhcGlcbiAgICB2YXIgZXhwYW5kQ29sbGFwc2UgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XG5cbiAgICB2YXIgbm9kZXMgPSBleHBhbmRDb2xsYXBzZS5leHBhbmRhYmxlTm9kZXMoY3kubm9kZXMoKS5maWx0ZXIoXCJbY2xhc3NePSdjb21wbGV4J11cIikpO1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiZXhwYW5kUmVjdXJzaXZlbHlcIiwge1xuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGV4cGFuZENvbGxhcHNlLmV4cGFuZFJlY3Vyc2l2ZWx5KG5vZGVzKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQ29sbGFwc2UgYWxsIG5vZGVzIHJlY3Vyc2l2ZWx5LiBSZXF1aXJlcyBleHBhbmRDb2xsYXBzZSBleHRlbnNpb24gYW5kIGNvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuY29sbGFwc2VBbGwgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IGV4cGFuZENvbGxhcHNlIGFwaVxuICAgIHZhciBleHBhbmRDb2xsYXBzZSA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKTtcblxuICAgIHZhciBub2RlcyA9IGN5Lm5vZGVzKCc6dmlzaWJsZScpO1xuICAgIGlmIChleHBhbmRDb2xsYXBzZS5jb2xsYXBzaWJsZU5vZGVzKG5vZGVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiY29sbGFwc2VSZWN1cnNpdmVseVwiLCB7XG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXhwYW5kQ29sbGFwc2UuY29sbGFwc2VSZWN1cnNpdmVseShub2Rlcyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEV4cGFuZCBhbGwgbm9kZXMgcmVjdXJzaXZlbHkuIFJlcXVpcmVzIGV4cGFuZENvbGxhcHNlIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5leHBhbmRBbGwgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IGV4cGFuZENvbGxhcHNlIGFwaVxuICAgIHZhciBleHBhbmRDb2xsYXBzZSA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKTtcblxuICAgIHZhciBub2RlcyA9IGV4cGFuZENvbGxhcHNlLmV4cGFuZGFibGVOb2RlcyhjeS5ub2RlcygnOnZpc2libGUnKSk7XG4gICAgaWYgKG5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJleHBhbmRSZWN1cnNpdmVseVwiLCB7XG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXhwYW5kQ29sbGFwc2UuZXhwYW5kUmVjdXJzaXZlbHkobm9kZXMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBJbmNyZWFzZSBib3JkZXIgd2lkdGggdG8gc2hvdyBub2RlcyB3aXRoIGhpZGRlbiBuZWlnaGJvcnNcbiAgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyID0gZnVuY3Rpb24oZWxlcyl7XG4gICAgZWxlcy5mb3JFYWNoKGZ1bmN0aW9uKCBlbGUgKXtcbiAgICAgIHZhciBkZWZhdWx0Qm9yZGVyV2lkdGggPSBOdW1iZXIoZWxlLmRhdGEoXCJib3JkZXItd2lkdGhcIikpO1xuICAgICAgZWxlLmRhdGEoXCJib3JkZXItd2lkdGhcIiwgZGVmYXVsdEJvcmRlcldpZHRoICsgMik7XG4gICAgfSk7XG4gICAgZWxlcy5kYXRhKFwidGhpY2tCb3JkZXJcIiwgdHJ1ZSk7XG4gICAgcmV0dXJuIGVsZXM7XG4gIH1cbiAgLy8gRGVjcmVhc2UgYm9yZGVyIHdpZHRoIHdoZW4gaGlkZGVuIG5laWdoYm9ycyBvZiB0aGUgbm9kZXMgYmVjb21lIHZpc2libGVcbiAgbWFpblV0aWxpdGllcy50aGluQm9yZGVyID0gZnVuY3Rpb24oZWxlcyl7XG4gICAgZWxlcy5mb3JFYWNoKGZ1bmN0aW9uKCBlbGUgKXtcbiAgICAgIHZhciBkZWZhdWx0Qm9yZGVyV2lkdGggPSBOdW1iZXIoZWxlLmRhdGEoXCJib3JkZXItd2lkdGhcIikpO1xuICAgICAgZWxlLmRhdGEoXCJib3JkZXItd2lkdGhcIiwgZGVmYXVsdEJvcmRlcldpZHRoIC0gMik7XG4gICAgfSk7XG4gICAgZWxlcy5yZW1vdmVEYXRhKFwidGhpY2tCb3JkZXJcIik7XG4gICAgcmV0dXJuIGVsZXM7XG4gIH1cblxuICBtYWluVXRpbGl0aWVzLmhpZGVFbGVzU2ltcGxlID0gZnVuY3Rpb24oZWxlcykge1xuICAgIHZhciB2aWV3VXRpbGl0aWVzID0gY3kudmlld1V0aWxpdGllcygnZ2V0Jyk7XG5cbiAgICBpZiAoZWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLnVuZG9hYmxlKSB7XG5cbiAgICAgIHZhciB1ciA9IGN5LnVuZG9SZWRvKCk7XG4gICAgICB1ci5hY3Rpb24oXCJ0aGlja2VuQm9yZGVyXCIsIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlciwgbWFpblV0aWxpdGllcy50aGluQm9yZGVyKTtcbiAgICAgIHVyLmFjdGlvbihcInRoaW5Cb3JkZXJcIiwgbWFpblV0aWxpdGllcy50aGluQm9yZGVyLCBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIpO1xuXG4gICAgICAvLyBCYXRjaGluZ1xuICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygpLmludGVyc2VjdGlvbihlbGVzKTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGluQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcn0pO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcImhpZGVcIiwgcGFyYW06IGVsZXN9KTtcbiAgICAgIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gZWxlcy5uZWlnaGJvcmhvb2QoXCI6dmlzaWJsZVwiKVxuICAgICAgICAgICAgICAubm9kZXMoKS5kaWZmZXJlbmNlKGVsZXMpLmRpZmZlcmVuY2UoY3kubm9kZXMoXCJbdGhpY2tCb3JkZXJdXCIpKTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGlja2VuQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcn0pO1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImJhdGNoXCIsIGFjdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlcihub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcik7XG4gICAgICB2aWV3VXRpbGl0aWVzLmhpZGUoZWxlcyk7XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEV4dGVuZHMgdGhlIGdpdmVuIG5vZGVzIGxpc3QgaW4gYSBzbWFydCB3YXkgdG8gbGVhdmUgdGhlIG1hcCBpbnRhY3QgYW5kIGhpZGVzIHRoZSByZXN1bHRpbmcgbGlzdC5cbiAgLy8gUmVxdWlyZXMgdmlld1V0aWxpdGllcyBleHRlbnNpb24gYW5kIGNvbnNpZGVycyAndW5kb2FibGUnIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5oaWRlTm9kZXNTbWFydCA9IGZ1bmN0aW9uKF9ub2Rlcykge1xuICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIHdlIGNhbiBhc3N1bWUgdGhhdCB2aWV3IHV0aWxpdGllcyBleHRlbnNpb24gaXMgb24gdXNlXG4gICAgdmFyIHZpZXdVdGlsaXRpZXMgPSBjeS52aWV3VXRpbGl0aWVzKCdnZXQnKTtcbiAgICB2YXIgbm9kZXMgPSBfbm9kZXMubm9kZXMoKTsgLy8gRW5zdXJlIHRoYXQgbm9kZXMgbGlzdCBqdXN0IGluY2x1ZGUgbm9kZXNcblxuICAgIHZhciBhbGxOb2RlcyA9IGN5Lm5vZGVzKFwiOnZpc2libGVcIik7XG4gICAgdmFyIG5vZGVzVG9TaG93ID0gZWxlbWVudFV0aWxpdGllcy5leHRlbmRSZW1haW5pbmdOb2Rlcyhub2RlcywgYWxsTm9kZXMpO1xuICAgIHZhciBub2Rlc1RvSGlkZSA9IGFsbE5vZGVzLm5vdChub2Rlc1RvU2hvdyk7XG5cbiAgICBpZiAobm9kZXNUb0hpZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy51bmRvYWJsZSkge1xuXG4gICAgICB2YXIgdXIgPSBjeS51bmRvUmVkbygpO1xuICAgICAgdXIuYWN0aW9uKFwidGhpY2tlbkJvcmRlclwiLCBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIsIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlcik7XG4gICAgICB1ci5hY3Rpb24oXCJ0aGluQm9yZGVyXCIsIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlciwgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyKTtcblxuICAgICAgLy8gQmF0Y2hpbmdcbiAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24obm9kZXNUb0hpZGUpO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yfSk7XG4gICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwiaGlkZVwiLCBwYXJhbTogbm9kZXNUb0hpZGV9KTtcbiAgICAgIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gbm9kZXNUb0hpZGUubmVpZ2hib3Job29kKFwiOnZpc2libGVcIilcbiAgICAgICAgICAgICAgLm5vZGVzKCkuZGlmZmVyZW5jZShub2Rlc1RvSGlkZSkuZGlmZmVyZW5jZShjeS5ub2RlcyhcIlt0aGlja0JvcmRlcl1cIikpO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaWNrZW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yfSk7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiYmF0Y2hcIiwgYWN0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgbWFpblV0aWxpdGllcy50aGluQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICAgIHZpZXdVdGlsaXRpZXMuaGlkZShub2Rlc1RvSGlkZSk7XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgIH1cbiAgfTtcblxuICAvLyBFeHRlbmRzIHRoZSBnaXZlbiBub2RlcyBsaXN0IGluIGEgc21hcnQgd2F5IHRvIGxlYXZlIHRoZSBtYXAgaW50YWN0LlxuICAvLyBUaGVuIHVuaGlkZXMgdGhlIHJlc3VsdGluZyBsaXN0IGFuZCBoaWRlcyBvdGhlcnMuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuc2hvd05vZGVzU21hcnQgPSBmdW5jdGlvbihfbm9kZXMpIHtcbiAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB3ZSBjYW4gYXNzdW1lIHRoYXQgdmlldyB1dGlsaXRpZXMgZXh0ZW5zaW9uIGlzIG9uIHVzZVxuICAgIHZhciB2aWV3VXRpbGl0aWVzID0gY3kudmlld1V0aWxpdGllcygnZ2V0Jyk7XG4gICAgdmFyIG5vZGVzID0gX25vZGVzLm5vZGVzKCk7IC8vIEVuc3VyZSB0aGF0IG5vZGVzIGxpc3QganVzdCBpbmNsdWRlIG5vZGVzXG5cbiAgICB2YXIgYWxsTm9kZXMgPSBjeS5lbGVtZW50cygpO1xuICAgIHZhciBub2Rlc1RvU2hvdyA9IGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kTm9kZUxpc3Qobm9kZXMpO1xuICAgIHZhciBub2Rlc1RvSGlkZSA9IGFsbE5vZGVzLm5vdChub2Rlc1RvU2hvdyk7XG5cbiAgICBpZiAobm9kZXNUb0hpZGUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHVyID0gY3kudW5kb1JlZG8oKTtcbiAgICAgIHVyLmFjdGlvbihcInRoaWNrZW5Cb3JkZXJcIiwgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyLCBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIpO1xuICAgICAgdXIuYWN0aW9uKFwidGhpbkJvcmRlclwiLCBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIsIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlcik7XG5cbiAgICAgIC8vIEJhdGNoaW5nXG4gICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yfSk7XG4gICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwiaGlkZVwiLCBwYXJhbTogbm9kZXNUb0hpZGV9KTtcbiAgICAgIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gbm9kZXNUb0hpZGUubmVpZ2hib3Job29kKFwiOnZpc2libGVcIilcbiAgICAgICAgICAgICAgLm5vZGVzKCkuZGlmZmVyZW5jZShub2Rlc1RvSGlkZSk7XG4gICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwidGhpY2tlbkJvcmRlclwiLCBwYXJhbTogbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3J9KTtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJiYXRjaFwiLCBhY3Rpb25zKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgICAgdmlld1V0aWxpdGllcy5oaWRlKG5vZGVzVG9IaWRlKTtcbiAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlcihub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcik7XG4gICAgfVxuICB9O1xuXG4gIC8vIFVuaGlkZXMgZWxlbWVudHMgcGFzc2VkIGFzIGFyZ3VtZW50cy4gUmVxdWlyZXMgdmlld1V0aWxpdGllcyBleHRlbnNpb24gYW5kIGNvbnNpZGVycyAndW5kb2FibGUnIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5zaG93RWxlcyA9IGZ1bmN0aW9uKGVsZXMpIHtcbiAgICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIHdlIGNhbiBhc3N1bWUgdGhhdCB2aWV3IHV0aWxpdGllcyBleHRlbnNpb24gaXMgb24gdXNlXG4gICAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuICAgICAgdmFyIGhpZGRlbkVsZXMgPSBlbGVzLmZpbHRlcignOmhpZGRlbicpO1xuICAgICAgaWYgKGhpZGRlbkVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgICAgIHZhciB1ciA9IGN5LnVuZG9SZWRvKCk7XG4gICAgICAgICAgdXIuYWN0aW9uKFwidGhpY2tlbkJvcmRlclwiLCBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIsIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlcik7XG4gICAgICAgICAgdXIuYWN0aW9uKFwidGhpbkJvcmRlclwiLCBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIsIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlcik7XG5cbiAgICAgICAgICAvLyBCYXRjaGluZ1xuICAgICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgICAgdmFyIG5vZGVzVG9UaGluQm9yZGVyID0gKGhpZGRlbkVsZXMubmVpZ2hib3Job29kKFwiOnZpc2libGVcIikubm9kZXMoXCJbdGhpY2tCb3JkZXJdXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5kaWZmZXJlbmNlKGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5kaWZmZXJlbmNlKGhpZGRlbkVsZXMuZWRnZXMoKS51bmlvbihoaWRkZW5FbGVzLm5vZGVzKCkuY29ubmVjdGVkRWRnZXMoKSkpLmNvbm5lY3RlZE5vZGVzKCkpO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGluQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1RvVGhpbkJvcmRlcn0pO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJzaG93XCIsIHBhcmFtOiBoaWRkZW5FbGVzfSk7XG4gICAgICAgICAgdmFyIG5vZGVzVG9UaGlja2VuQm9yZGVyID0gaGlkZGVuRWxlcy5ub2RlcygpLmVkZ2VzV2l0aChjeS5ub2RlcyhcIjpoaWRkZW5cIikuZGlmZmVyZW5jZShoaWRkZW5FbGVzLm5vZGVzKCkpKVxuICBcdCAgICAgICAgICAgIC5jb25uZWN0ZWROb2RlcygpLmludGVyc2VjdGlvbihoaWRkZW5FbGVzLm5vZGVzKCkpO1xuICAgICAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGlja2VuQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1RvVGhpY2tlbkJvcmRlcn0pO1xuICAgICAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJiYXRjaFwiLCBhY3Rpb25zKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgICAgICBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgICAgICAgIHZpZXdVdGlsaXRpZXMuc2hvdyhlbGVzKTtcbiAgICAgICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICAgICAgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICAgIH1cbiAgfTtcblxuICAvLyBVbmhpZGVzIGFsbCBlbGVtZW50cy4gUmVxdWlyZXMgdmlld1V0aWxpdGllcyBleHRlbnNpb24gYW5kIGNvbnNpZGVycyAndW5kb2FibGUnIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5zaG93QWxsID0gZnVuY3Rpb24oKSB7XG4gICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2UgY2FuIGFzc3VtZSB0aGF0IHZpZXcgdXRpbGl0aWVzIGV4dGVuc2lvbiBpcyBvbiB1c2VcbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuXG4gICAgaWYgKGN5LmVsZW1lbnRzKCkubGVuZ3RoID09PSBjeS5lbGVtZW50cygnOnZpc2libGUnKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICB2YXIgdXIgPSBjeS51bmRvUmVkbygpO1xuICAgICAgdXIuYWN0aW9uKFwidGhpY2tlbkJvcmRlclwiLCBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIsIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlcik7XG4gICAgICB1ci5hY3Rpb24oXCJ0aGluQm9yZGVyXCIsIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlciwgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyKTtcblxuICAgICAgLy8gQmF0Y2hpbmdcbiAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5ub2RlcyhcIlt0aGlja0JvcmRlcl1cIik7XG4gICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwidGhpbkJvcmRlclwiLCBwYXJhbTogbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3J9KTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJzaG93XCIsIHBhcmFtOiBjeS5lbGVtZW50cygpfSk7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiYmF0Y2hcIiwgYWN0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgbWFpblV0aWxpdGllcy50aGluQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICAgIHZpZXdVdGlsaXRpZXMuc2hvdyhjeS5lbGVtZW50cygpKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gUmVtb3ZlcyB0aGUgZ2l2ZW4gZWxlbWVudHMgaW4gYSBzaW1wbGUgd2F5LiBDb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuZGVsZXRlRWxlc1NpbXBsZSA9IGZ1bmN0aW9uKGVsZXMpIHtcbiAgICBpZiAoZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSB8fCBlbGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJkZWxldGVFbGVzU2ltcGxlXCIsIHtcbiAgICAgICAgZWxlczogZWxlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZWxlcy5yZW1vdmUoKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gRXh0ZW5kcyB0aGUgZ2l2ZW4gbm9kZXMgbGlzdCBpbiBhIHNtYXJ0IHdheSB0byBsZWF2ZSB0aGUgbWFwIGludGFjdCBhbmQgcmVtb3ZlcyB0aGUgcmVzdWx0aW5nIGxpc3QuXG4gIC8vIENvbnNpZGVycyAndW5kb2FibGUnIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5kZWxldGVOb2Rlc1NtYXJ0ID0gZnVuY3Rpb24oX25vZGVzKSB7XG4gICAgdmFyIG5vZGVzID0gX25vZGVzLm5vZGVzKCk7XG4gICAgaWYgKGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgfHwgbm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiZGVsZXRlTm9kZXNTbWFydFwiLCB7XG4gICAgICAgIGZpcnN0VGltZTogdHJ1ZSxcbiAgICAgICAgZWxlczogbm9kZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuZGVsZXRlTm9kZXNTbWFydChub2Rlcyk7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzTmVlZDJIaWdobGlndGgoZWxlczJoaWdobGlndGgpIHtcbiAgICBpZiAoZWxlczJoaWdobGlndGgubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciB2aWV3VXRpbGl0aWVzID0gY3kudmlld1V0aWxpdGllcygnZ2V0Jyk7XG4gICAgdmFyIGhpZ2hsaWdodENsYXNzID0gdmlld1V0aWxpdGllcy5nZXRBbGxIaWdobGlnaHRDbGFzc2VzKClbMF07XG4gICAgdmFyIGhpZ2hsaWdodGVkRWxlcyA9IGN5LmVsZW1lbnRzKCcuJyArIGhpZ2hsaWdodENsYXNzKS5maWx0ZXIoJzp2aXNpYmxlJyk7XG4gICAgaWYgKGhpZ2hsaWdodGVkRWxlcy5jb250YWlucyhlbGVzMmhpZ2hsaWd0aCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBIaWdobGlnaHRzIHNlbGVjdGVkIGVsZW1lbnRzLiBSZXF1aXJlcyB2aWV3VXRpbGl0aWVzIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzICd1bmRvYWJsZScgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLmhpZ2hsaWdodFNlbGVjdGVkID0gZnVuY3Rpb24gKF9lbGVzKSB7XG5cbiAgICB2YXIgZWxlc1RvSGlnaGxpZ2h0ID0gX2VsZXM7XG4gICAgaWYgKCFpc05lZWQySGlnaGxpZ3RoKGVsZXNUb0hpZ2hsaWdodCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB3ZSBjYW4gYXNzdW1lIHRoYXQgdmlldyB1dGlsaXRpZXMgZXh0ZW5zaW9uIGlzIG9uIHVzZVxuICAgIHZhciB2aWV3VXRpbGl0aWVzID0gY3kudmlld1V0aWxpdGllcygnZ2V0Jyk7XG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oJ2hpZ2hsaWdodCcsIHsgZWxlczogZWxlc1RvSGlnaGxpZ2h0LCBpZHg6IDAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmlld1V0aWxpdGllcy5oaWdobGlnaHQoZWxlc1RvSGlnaGxpZ2h0KTtcbiAgICB9XG5cbiAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gIH07XG5cbiAgLy8gSGlnaGxpZ2h0cyBuZWlnaGJvdXJzIG9mIHRoZSBnaXZlbiBub2Rlcy4gUmVxdWlyZXMgdmlld1V0aWxpdGllcyBleHRlbnNpb24gYW5kIGNvbnNpZGVycyAndW5kb2FibGUnIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5oaWdobGlnaHROZWlnaGJvdXJzID0gZnVuY3Rpb24oX25vZGVzKSB7XG4gICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2UgY2FuIGFzc3VtZSB0aGF0IHZpZXcgdXRpbGl0aWVzIGV4dGVuc2lvbiBpcyBvbiB1c2VcbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuXG4gICAgdmFyIG5vZGVzID0gX25vZGVzLm5vZGVzKCk7IC8vIEVuc3VyZSB0aGF0IG5vZGVzIGxpc3QganVzdCBpbmNsdWRlIG5vZGVzXG4gICAgdmFyIGVsZXNUb0hpZ2hsaWdodCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0TmVpZ2hib3Vyc09mTm9kZXMobm9kZXMpO1xuICAgIGlmICghaXNOZWVkMkhpZ2hsaWd0aChlbGVzVG9IaWdobGlnaHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oJ2hpZ2hsaWdodCcsIHsgZWxlczogZWxlc1RvSGlnaGxpZ2h0LCBpZHg6IDAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmlld1V0aWxpdGllcy5oaWdobGlnaHQoZWxlc1RvSGlnaGxpZ2h0KTtcbiAgICB9XG5cbiAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gIH07XG5cbiAgLy8gRmluZHMgdGhlIGVsZW1lbnRzIHdob3NlIGxhYmVsIGluY2x1ZGVzIHRoZSBnaXZlbiBsYWJlbCBhbmQgaGlnaGxpZ2h0cyBwcm9jZXNzZXMgb2YgdGhvc2UgZWxlbWVudHMuXG4gIC8vIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuc2VhcmNoQnlMYWJlbCA9IGZ1bmN0aW9uKGxhYmVsKSB7XG4gICAgaWYgKGxhYmVsLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vZGVzVG9IaWdobGlnaHQgPSBjeS5ub2RlcyhcIjp2aXNpYmxlXCIpLmZpbHRlcihmdW5jdGlvbiAoZWxlLCBpKSB7XG4gICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGVsZSA9IGk7XG4gICAgICB9XG4gICAgICBpZiAoZWxlLmRhdGEoXCJsYWJlbFwiKSAmJiBlbGUuZGF0YShcImxhYmVsXCIpLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihsYWJlbCkgPj0gMCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIGlmIChub2Rlc1RvSGlnaGxpZ2h0Lmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2UgY2FuIGFzc3VtZSB0aGF0IHZpZXcgdXRpbGl0aWVzIGV4dGVuc2lvbiBpcyBvbiB1c2VcbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuXG4gICAgLy8gVXNlIHRoaXMgbGluZSBmb3Igc21hcnQgc2VhcmNoXG4gICAgLy8gbm9kZXNUb0hpZ2hsaWdodCA9IGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kTm9kZUxpc3Qobm9kZXNUb0hpZ2hsaWdodCk7XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbygnaGlnaGxpZ2h0JywgeyBlbGVzOiBub2Rlc1RvSGlnaGxpZ2h0LCBpZHg6IDAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmlld1V0aWxpdGllcy5oaWdobGlnaHQobm9kZXNUb0hpZ2hsaWdodCk7XG4gICAgfVxuXG4gICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICB9O1xuXG4gIC8vIEhpZ2hsaWdodHMgcHJvY2Vzc2VzIG9mIHRoZSBnaXZlbiBub2Rlcy4gUmVxdWlyZXMgdmlld1V0aWxpdGllcyBleHRlbnNpb24gYW5kIGNvbnNpZGVycyAndW5kb2FibGUnIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5oaWdobGlnaHRQcm9jZXNzZXMgPSBmdW5jdGlvbihfbm9kZXMpIHtcbiAgICB2YXIgbm9kZXMgPSBfbm9kZXMubm9kZXMoKTsgLy8gRW5zdXJlIHRoYXQgbm9kZXMgbGlzdCBqdXN0IGluY2x1ZGUgbm9kZXNcbiAgICB2YXIgZWxlc1RvSGlnaGxpZ2h0ID0gZWxlbWVudFV0aWxpdGllcy5leHRlbmROb2RlTGlzdChub2Rlcyk7XG4gICAgaWYgKCFpc05lZWQySGlnaGxpZ3RoKGVsZXNUb0hpZ2hsaWdodCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB3ZSBjYW4gYXNzdW1lIHRoYXQgdmlldyB1dGlsaXRpZXMgZXh0ZW5zaW9uIGlzIG9uIHVzZVxuICAgIHZhciB2aWV3VXRpbGl0aWVzID0gY3kudmlld1V0aWxpdGllcygnZ2V0Jyk7XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbygnaGlnaGxpZ2h0JywgeyBlbGVzOiBlbGVzVG9IaWdobGlnaHQsIGlkeDogMCB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2aWV3VXRpbGl0aWVzLmhpZ2hsaWdodChlbGVzVG9IaWdobGlnaHQpO1xuICAgIH1cblxuICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgfTtcblxuICAvLyBVbmhpZ2hsaWdodHMgYW55IGhpZ2hsaWdodGVkIGVsZW1lbnQuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMucmVtb3ZlSGlnaGxpZ2h0cyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChlbGVtZW50VXRpbGl0aWVzLm5vbmVJc05vdEhpZ2hsaWdodGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB3ZSBjYW4gYXNzdW1lIHRoYXQgdmlldyB1dGlsaXRpZXMgZXh0ZW5zaW9uIGlzIG9uIHVzZVxuICAgIHZhciB2aWV3VXRpbGl0aWVzID0gY3kudmlld1V0aWxpdGllcygnZ2V0Jyk7XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInJlbW92ZUhpZ2hsaWdodHNcIik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmlld1V0aWxpdGllcy5yZW1vdmVIaWdobGlnaHRzKCk7XG4gICAgfVxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5sb2FkTGF5b3V0RGF0YSA9IGZ1bmN0aW9uKGxheW91dFRleHQsIGJ5TmFtZSkge1xuICAgIGxheW91dExvYWRlci5sb2FkKCBsYXlvdXRUZXh0LCBieU5hbWUgKTtcbiAgfTtcblxuICBtYWluVXRpbGl0aWVzLmdldExheW91dFRleHQgPSBmdW5jdGlvbiggYnlOYW1lICkge1xuICAgIGxheW91dFRvVGV4dC5jb252ZXJ0KCBieU5hbWUgKTtcbiAgfTtcblxuICAvLyBQZXJmb3JtcyBsYXlvdXQgYnkgZ2l2ZW4gbGF5b3V0T3B0aW9ucy4gQ29uc2lkZXJzICd1bmRvYWJsZScgb3B0aW9uLiBIb3dldmVyLCBieSBzZXR0aW5nIG5vdFVuZG9hYmxlIHBhcmFtZXRlclxuICAvLyB0byBhIHRydXRoeSB2YWx1ZSB5b3UgY2FuIGZvcmNlIGFuIHVuZGFibGUgbGF5b3V0IG9wZXJhdGlvbiBpbmRlcGVuZGFudCBvZiAndW5kb2FibGUnIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5wZXJmb3JtTGF5b3V0ID0gZnVuY3Rpb24obGF5b3V0T3B0aW9ucywgbm90VW5kb2FibGUpIHtcbiAgICBcbiAgICBpZiAoIW9wdGlvbnMudW5kb2FibGUgfHwgbm90VW5kb2FibGUpIHsgLy8gJ25vdFVuZG9hYmxlJyBmbGFnIGNhbiBiZSB1c2VkIHRvIGhhdmUgY29tcG9zaXRlIGFjdGlvbnMgaW4gdW5kby9yZWRvIHN0YWNrXG4gICAgICAvLyBUaGluZ3MgdG8gZG8gYmVmb3JlIHBlcmZvcm1pbmcgbGF5b3V0XG4gICAgICBtYWluVXRpbGl0aWVzLmJlZm9yZVBlcmZvcm1MYXlvdXQoKTtcbiAgICAgIFxuICAgICAgdmFyIGxheW91dCA9IGN5LmVsZW1lbnRzKCkuZmlsdGVyKCc6dmlzaWJsZScpLmxheW91dChsYXlvdXRPcHRpb25zKTtcblxuICAgICAgLy8gQ2hlY2sgdGhpcyBmb3IgY3l0b3NjYXBlLmpzIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgIGlmIChsYXlvdXQgJiYgbGF5b3V0LnJ1bikge1xuICAgICAgICBsYXlvdXQucnVuKCk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImxheW91dFwiLCB7XG4gICAgICAgIG9wdGlvbnM6IGxheW91dE9wdGlvbnMsXG4gICAgICAgIGVsZXM6IGN5LmVsZW1lbnRzKCkuZmlsdGVyKCc6dmlzaWJsZScpXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQ3JlYXRlcyBhbiBzYmdubWwgZmlsZSBjb250ZW50IGZyb20gdGhlIGV4aXNpbmcgZ3JhcGggYW5kIHJldHVybnMgaXQuXG4gIG1haW5VdGlsaXRpZXMuY3JlYXRlU2Jnbm1sID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGpzb25Ub1NiZ25tbC5jcmVhdGVTYmdubWwoKTtcbiAgfTtcblxuICBtYWluVXRpbGl0aWVzLmNyZWF0ZU53dCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBqc29uVG9Od3QuY3JlYXRlU2Jnbm1sKCk7XG4gIH07XG5cbiAgLy8gQ29udmVydHMgZ2l2ZW4gc2Jnbm1sIGRhdGEgdG8gYSBqc29uIG9iamVjdCBpbiBhIHNwZWNpYWwgZm9ybWF0XG4gIC8vIChodHRwOi8vanMuY3l0b3NjYXBlLm9yZy8jbm90YXRpb24vZWxlbWVudHMtanNvbikgYW5kIHJldHVybnMgaXQuXG4gIG1haW5VdGlsaXRpZXMuY29udmVydFNiZ25tbFRvSnNvbiA9IGZ1bmN0aW9uKGRhdGEsIHVybFBhcmFtcykge1xuICAgIHJldHVybiBzYmdubWxUb0pzb24uY29udmVydChkYXRhLCB1cmxQYXJhbXMpO1xuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMuY29udmVydE53dFRvSnNvbiA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICByZXR1cm4gbnd0VG9Kc29uLmNvbnZlcnQoZGF0YSk7XG4gIH07XG5cblxuICAvLyBDcmVhdGUgdGhlIHF0aXAgY29udGVudHMgb2YgdGhlIGdpdmVuIG5vZGUgYW5kIHJldHVybnMgaXQuXG4gIG1haW5VdGlsaXRpZXMuZ2V0UXRpcENvbnRlbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0UXRpcENvbnRlbnQobm9kZSk7XG4gIH07XG5cbiAgLy8gQ2hhbmdlIG9wdGlvblxuICBtYWluVXRpbGl0aWVzLnNldFNob3dDb21wbGV4TmFtZSA9IGZ1bmN0aW9uKHNob3dDb21wbGV4TmFtZSkge1xuICAgIG9wdGlvbnMuc2hvd0NvbXBsZXhOYW1lID0gc2hvd0NvbXBsZXhOYW1lO1xuICAgIC8vIG1ha2UgY2hhbmdlIGFjdGl2ZSBieSB0cmlnZ2VyaW5nIGRhdGEgd2hpY2ggd2lsbCB0cmlnZ2VyIHN0eWxlIHVwZGF0ZVxuICAgIGN5Lm5vZGVzKCdbY2xhc3NePVwiY29tcGxleFwiXScpLmZvckVhY2goZnVuY3Rpb24oZWxlKXtcbiAgICAgIGVsZS50cmlnZ2VyKFwiZGF0YVwiKTtcbiAgICB9KTtcbiAgfTtcblxuICAvKlxuICAgKiBTZXRzIHRoZSBvcmRlcmluZyBvZiB0aGUgZ2l2ZW4gbm9kZXMuXG4gICAqIE9yZGVyaW5nIG9wdGlvbnMgYXJlICdMLXRvLVInLCAnUi10by1MJywgJ1QtdG8tQicsICdCLXRvLVQnLCAnbm9uZScuXG4gICAqIElmIGEgbm9kZSBkb2VzIG5vdCBoYXZlIGFueSBwb3J0IGJlZm9yZSB0aGUgb3BlcmF0aW9uIGFuZCBpdCBpcyBzdXBwb3NlZCB0byBoYXZlIHNvbWUgYWZ0ZXIgb3BlcmF0aW9uIHRoZSBwb3J0RGlzdGFuY2UgcGFyYW1ldGVyIGlzXG4gICAqIHVzZWQgdG8gc2V0IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBub2RlIGNlbnRlciBhbmQgdGhlIHBvcnRzLiBUaGUgZGVmYXVsdCBwb3J0IGRpc3RhbmNlIGlzIDYwLlxuICAgKiBDb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICAgKi9cbiAgbWFpblV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nID0gZnVuY3Rpb24gKG5vZGVzLCBvcmRlcmluZywgcG9ydERpc3RhbmNlKSB7XG4gICAgaWYgKCBub2Rlcy5sZW5ndGggPT09IDAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLnNldFBvcnRzT3JkZXJpbmcobm9kZXMsIG9yZGVyaW5nLCBwb3J0RGlzdGFuY2UpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBwYXJhbSA9IHtcbiAgICAgICAgbm9kZXM6IG5vZGVzLFxuICAgICAgICBvcmRlcmluZzogb3JkZXJpbmcsXG4gICAgICAgIHBvcnREaXN0YW5jZTogcG9ydERpc3RhbmNlXG4gICAgICB9O1xuXG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwic2V0UG9ydHNPcmRlcmluZ1wiLCBwYXJhbSk7XG4gICAgfVxuXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IG1hcCBwcm9wZXJ0aWVzIGZyb20gU0JHTk1MIGZpbGVcbiAgICogTmVlZHMgdG8gYmUgY2FsbGVkIGFmdGVyIGZpbGUgaXMgbG9hZGVkIC0gc2JnbnZpekxvYWRGaWxlRW5kIGV2ZW50XG4gICAqIHJldHVybjogbWFwIHByb3BlcnRpZXMgYXMgb2JqZWN0XG4gICAqL1xubWFpblV0aWxpdGllcy5nZXRNYXBQcm9wZXJ0aWVzID0gZnVuY3Rpb24oKSB7XG4gIGlmKCBlbGVtZW50VXRpbGl0aWVzLmZpbGVGb3JtYXQgIT09IHVuZGVmaW5lZCl7XG4gICAgaWYoIGVsZW1lbnRVdGlsaXRpZXMuZmlsZUZvcm1hdCA9PSAnc2Jnbm1sJylcbiAgICAgIHJldHVybiBzYmdubWxUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqKCk7XG4gICAgZWxzZSBpZiggZWxlbWVudFV0aWxpdGllcy5maWxlRm9ybWF0ID09ICdud3QnIClcbiAgICAgIHJldHVybiBud3RUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqKCk7XG4gICAgZWxzZSBpZiggZWxlbWVudFV0aWxpdGllcy5maWxlRm9ybWF0ID09ICd0ZCcpXG4gICAgICByZXR1cm4gdGRUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqKCk7XG4gICAgZWxzZSBpZiggZWxlbWVudFV0aWxpdGllcy5maWxlRm9ybWF0ID09ICdzaWYnIClcbiAgICAgIHJldHVybiBzaWZUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqKCk7XG4gICAgZWxzZXtcbiAgICAgIGNvbnNvbGUubG9nKCBcIkZpbGUgZm9ybWF0IG1pc21hdGNoZWQhXCIpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1lbHNle1xuICAgIGNvbnNvbGUubG9nKCBcIkZpbGUgZm9ybWF0IGlzIG5vdCBkZWZpbmVkIVwiKVxuICAgIHJldHVybjtcbiAgfVxuIH07XG4gIG1haW5VdGlsaXRpZXMuZG9WYWxpZGF0aW9uID0gZnVuY3Rpb24oZmlsZSkge1xuICAgIHJldHVybiBzYmdubWxUb0pzb24uZG9WYWxpZGF0aW9uKGZpbGUpO1xuICB9XG5cbiAgbWFpblV0aWxpdGllcy5zZXRDb21wb3VuZFBhZGRpbmcgPSBmdW5jdGlvbihuZXdQYWRkaW5nVmFsdWUpIHtcbiAgICBvcHRpb25zLmNvbXBvdW5kUGFkZGluZyA9IG5ld1BhZGRpbmdWYWx1ZTtcbiAgICBvcHRpb25VdGlsaXRpZXMuZXh0ZW5kT3B0aW9ucyhvcHRpb25zKTsgICAgXG4gIH1cblxuICBtYWluVXRpbGl0aWVzLmdldENvbXBvdW5kUGFkZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcHRpb25zLmNvbXBvdW5kUGFkZGluZztcbiAgfVxuICAgcmV0dXJuIG1haW5VdGlsaXRpZXM7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgc2Jnbm1sVG9Kc29uLCBlbGVtZW50VXRpbGl0aWVzO1xuXG4gIGZ1bmN0aW9uIG53dFRvSnNvbihwYXJhbSkge1xuICAgIHNiZ25tbFRvSnNvbiA9IHBhcmFtLnNiZ25tbFRvSnNvbkNvbnZlcnRlcjtcbiAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0clRvU2V0KCBzdHIsIHNwbGl0QnkgKSB7XG4gICAgdmFyIHNldCA9IHt9O1xuICAgIHZhciBsaXN0ID0gc3RyID8gc3RyLnNwbGl0KCBzcGxpdEJ5ICkgOiBbXTtcblxuICAgIGxpc3QuZm9yRWFjaCggZnVuY3Rpb24oIG1lbWJlciApIHtcbiAgICAgIHNldFsgbWVtYmVyIF0gPSB0cnVlO1xuICAgIH0gKTtcblxuICAgIHJldHVybiBzZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRGaXJzdEJ5VGFnTmFtZShhcmMsIHRhZ05hbWUpIHtcbiAgICB2YXIgZWxzID0gYXJjLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpO1xuICAgIHZhciB2YWwgPSBlbHMubGVuZ3RoID4gMCA/IGVsc1swXS5pbm5lckhUTUwgOiBudWxsO1xuXG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIHZhciBzaWZFZGdlUHJvcEhhbmRsZXJNYXAgPSB7XG4gICAgJ3BjSURTZXQnOiBmdW5jdGlvbihhcmMpIHtcbiAgICAgIHZhciB2YWwgPSBnZXRGaXJzdEJ5VGFnTmFtZSggYXJjLCAncGNJRHMnICk7XG4gICAgICByZXR1cm4gc3RyVG9TZXQoIHZhbCwgLzt8IC8gKTtcbiAgICB9LFxuICAgICdzaXRlTG9jU2V0JzogZnVuY3Rpb24oYXJjKSB7XG4gICAgICB2YXIgdmFsID0gZ2V0Rmlyc3RCeVRhZ05hbWUoIGFyYywgJ3NpdGVMb2NhdGlvbnMnICk7XG4gICAgICByZXR1cm4gc3RyVG9TZXQoIHZhbCwgJzsnICk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBzaWZOb2RlUHJvcEhhbmRsZXJNYXAgPSB7XG4gICAgJ3Rvb2x0aXAnOiBmdW5jdGlvbihnbHlwaCkge1xuICAgICAgdmFyIHZhbCA9IGdldEZpcnN0QnlUYWdOYW1lKCBnbHlwaCwgJ3Rvb2x0aXAnICk7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG4gICAgJ2luZm9ib3hlcyc6IGZ1bmN0aW9uKGdseXBoLCBkYXRhKSB7XG4gICAgICB2YXIgc2lmSW5mb2JveFByb3BIYW5kbGVyTWFwID0ge1xuICAgICAgICAndG9vbHRpcCc6IGZ1bmN0aW9uKGdseXBoKSB7XG4gICAgICAgICAgdmFyIHZhbCA9IGdldEZpcnN0QnlUYWdOYW1lKCBnbHlwaCwgJ3Rvb2x0aXAnICk7XG4gICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIGluZm9ib3hHbHlwaHMgPSBnbHlwaC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZ2x5cGgnKTtcbiAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8ICBpbmZvYm94R2x5cGhzLmxlbmd0aDsgaSsrICkge1xuICAgICAgICB2YXIgaW5mb2JveEdseXBoID0gaW5mb2JveEdseXBoc1sgaSBdO1xuICAgICAgICBPYmplY3Qua2V5cyhzaWZJbmZvYm94UHJvcEhhbmRsZXJNYXApLmZvckVhY2goIGZ1bmN0aW9uKCBwcm9wTmFtZSApIHtcbiAgICAgICAgICB2YXIgdmFsID0gc2lmSW5mb2JveFByb3BIYW5kbGVyTWFwWyBwcm9wTmFtZSBdKGluZm9ib3hHbHlwaCk7XG4gICAgICAgICAgaWYgKCB2YWwgKSB7XG4gICAgICAgICAgICBkYXRhLnN0YXRlc2FuZGluZm9zW2ldW3Byb3BOYW1lXSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gZXh0ZW5kRWxlbWVudHNEYXRhKCBlbGVzRGF0YSwgZmlsdGVyRmNuLCBnZXRYTUxFbGVCeUlkLCBwcm9wSGFuZGxlck1hcCwgeG1sT2JqZWN0ICkge1xuICAgIGVsZXNEYXRhLmZvckVhY2goIGZ1bmN0aW9uKCBvYmogKSB7XG4gICAgICB2YXIgZGF0YSA9IG9iai5kYXRhO1xuICAgICAgaWYgKCBmaWx0ZXJGY24oIGRhdGEuY2xhc3MgKSApIHtcbiAgICAgICAgdmFyIHhtbEVsZSA9IGdldFhNTEVsZUJ5SWQoIHhtbE9iamVjdCwgZGF0YS5pZCApO1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wSGFuZGxlck1hcCkuZm9yRWFjaCggZnVuY3Rpb24oIHByb3BOYW1lICkge1xuICAgICAgICAgIC8vIGRvZXMgbm90IGhhdmUgdG8gcmV0dXJuIGEgdmFsdWUsIG1heWJlIGEgdm9pZCBmdW5jdGlvbiBhcyB3ZWxsXG4gICAgICAgICAgdmFyIHZhbCA9IHByb3BIYW5kbGVyTWFwWyBwcm9wTmFtZSBdKHhtbEVsZSwgZGF0YSk7XG4gICAgICAgICAgaWYgKCB2YWwgKSB7XG4gICAgICAgICAgICBkYXRhWyBwcm9wTmFtZSBdID0gdmFsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSApO1xuICAgICAgfVxuICAgIH0gKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVsTWFwKCBncmFwaERhdGEgKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgIG5vZGVzOiB7fSxcbiAgICAgIGVkZ2VzOiB7fSxcbiAgICAgIGluZm9ib3hlczoge31cbiAgICB9O1xuXG4gICAgZ3JhcGhEYXRhLmVkZ2VzLmZvckVhY2goIGZ1bmN0aW9uKCBlZGdlICkge1xuICAgICAgbWFwLmVkZ2VzWyBlZGdlLmRhdGEuaWQgXSA9IGVkZ2U7XG4gICAgfSApO1xuXG4gICAgZ3JhcGhEYXRhLm5vZGVzLmZvckVhY2goIGZ1bmN0aW9uKCBub2RlICkge1xuICAgICAgbWFwLm5vZGVzWyBub2RlLmRhdGEuaWQgXSA9IG5vZGU7XG5cbiAgICAgIHZhciBpbmZvYm94ZXMgPSBub2RlLmRhdGEuc3RhdGVzYW5kaW5mb3M7XG5cbiAgICAgIGluZm9ib3hlcy5mb3JFYWNoKCBmdW5jdGlvbiggaW5mb2JveCApIHtcbiAgICAgICAgbWFwLmluZm9ib3hlc1sgaW5mb2JveC5pZCBdID0gaW5mb2JveDtcbiAgICAgIH0gKTtcbiAgICB9ICk7XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHlFeHRyYVN0eWxlc0RhdGEoIGdyYXBoRGF0YSwgeG1sT2JqZWN0ICkge1xuICAgIHZhciBsaXN0T2ZTdHlsZXMgPSB4bWxPYmplY3QucXVlcnlTZWxlY3RvcignbGlzdE9mU3R5bGVzJylcbiAgICB2YXIgc3R5bGVzID0gbGlzdE9mU3R5bGVzICYmIGxpc3RPZlN0eWxlcy5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZScpO1xuXG4gICAgaWYgKCFzdHlsZXMgfHwgc3R5bGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhdHRyVG9Qcm9wID0ge1xuICAgICAgJ3NoYXBlTmFtZSc6ICdzaGFwZS1uYW1lJ1xuICAgIH07XG4gICAgdmFyIGVsTWFwID0gZ2V0RWxNYXAoIGdyYXBoRGF0YSApO1xuXG4gICAgc3R5bGVzLmZvckVhY2goIGZ1bmN0aW9uKCBzdHlsZSApIHtcbiAgICAgIHZhciBpZExpc3QgPSBzdHlsZS5nZXRBdHRyaWJ1dGUoJ2lkTGlzdCcpLnNwbGl0KCcgJyk7XG5cbiAgICAgIE9iamVjdC5rZXlzKCBhdHRyVG9Qcm9wICkuZm9yRWFjaCggZnVuY3Rpb24oIGF0dHJOYW1lICkge1xuICAgICAgICB2YXIgZyA9IHN0eWxlLnF1ZXJ5U2VsZWN0b3IoJ2cnKTtcbiAgICAgICAgdmFyIHZhbCA9IGcuZ2V0QXR0cmlidXRlKCBhdHRyTmFtZSApO1xuXG4gICAgICAgIGlmICggdmFsICkge1xuICAgICAgICAgIHZhciBwcm9wTmFtZSA9IGF0dHJUb1Byb3BbIGF0dHJOYW1lIF07XG5cbiAgICAgICAgICBpZExpc3QuZm9yRWFjaCggZnVuY3Rpb24oIGlkICkge1xuICAgICAgICAgICAgaWYgKCBlbE1hcC5ub2Rlc1sgaWQgXSB8fCBlbE1hcC5lZGdlc1sgaWQgXSApIHtcbiAgICAgICAgICAgICAgdmFyIGVsID0gZWxNYXAubm9kZXNbIGlkIF0gfHwgZWxNYXAuZWRnZXNbIGlkIF07XG4gICAgICAgICAgICAgIGVsLmRhdGFbIHByb3BOYW1lIF0gPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICggZWxNYXAuaW5mb2JveGVzWyBpZCBdICkge1xuICAgICAgICAgICAgICB2YXIgZWwgPSBlbE1hcC5pbmZvYm94ZXNbIGlkIF07XG4gICAgICAgICAgICAgIGVsLnN0eWxlWyBwcm9wTmFtZSBdID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gKTtcbiAgICAgICAgfVxuICAgICAgfSApO1xuICAgIH0gKTtcbiAgfVxuXG4gIG53dFRvSnNvbi5jb252ZXJ0ID0gZnVuY3Rpb24oeG1sT2JqZWN0LCB1cmxQYXJhbXMpIHtcbiAgICB2YXIgZ3JhcGhEYXRhID0gc2Jnbm1sVG9Kc29uLmNvbnZlcnQoeG1sT2JqZWN0LCB1cmxQYXJhbXMpO1xuICAgIHZhciBtYXBUeXBlID0gZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlO1xuXG4gICAgaWYgKG1hcFR5cGUgIT09ICdQRCcgJiYgbWFwVHlwZSAhPT0gJ0FGJyAmJiBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgIT09ICdIeWJyaWRTYmduJykge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5maWxlRm9ybWF0ID0gJ253dCc7XG4gICAgICAvLyBleHRlbmQgZWRnZXMgZGF0YSB3aXRoIHNpZiBzcGVjaWZpYyBmZWF0dXJlc1xuICAgICAgZXh0ZW5kRWxlbWVudHNEYXRhKCBncmFwaERhdGEuZWRnZXMsIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZFZGdlLCBzYmdubWxUb0pzb24uZ2V0QXJjQnlJZC5iaW5kKHNiZ25tbFRvSnNvbiksIHNpZkVkZ2VQcm9wSGFuZGxlck1hcCwgeG1sT2JqZWN0ICk7XG4gICAgICBleHRlbmRFbGVtZW50c0RhdGEoIGdyYXBoRGF0YS5ub2RlcywgZWxlbWVudFV0aWxpdGllcy5pc1NJRk5vZGUsIHNiZ25tbFRvSnNvbi5nZXRHbHlwaEJ5SWQuYmluZChzYmdubWxUb0pzb24pLCBzaWZOb2RlUHJvcEhhbmRsZXJNYXAsIHhtbE9iamVjdCApO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRoZSBzdHlsZSBkYXRhIHRoYXQgaXMgbm90IGFwcGxpZWQgYmVjYXVzZSBvZiByZXN0cmljdGlvbnMgb2YgbGlic2JnblxuICAgIGFwcGx5RXh0cmFTdHlsZXNEYXRhKCBncmFwaERhdGEsIHhtbE9iamVjdCApO1xuXG4gICAgcmV0dXJuIGdyYXBoRGF0YTtcbiAgfTtcblxuICBud3RUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHNiZ25tbFRvSnNvbi5tYXBQcm9wZXJ0aWVzVG9PYmooKTtcbiAgfTtcblxuICByZXR1cm4gbnd0VG9Kc29uO1xufTtcbiIsIi8qXG4gKiAgRXh0ZW5kIGRlZmF1bHQgb3B0aW9ucyBhbmQgZ2V0IGN1cnJlbnQgb3B0aW9ucyBieSB1c2luZyB0aGlzIGZpbGVcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gZGVmYXVsdCBvcHRpb25zXG4gIHZhciBkZWZhdWx0cyA9IHtcbiAgICAvLyBUaGUgcGF0aCBvZiBjb3JlIGxpYnJhcnkgaW1hZ2VzIHdoZW4gc2JnbnZpeiBpcyByZXF1aXJlZCBmcm9tIG5wbSBhbmQgdGhlIGluZGV4IGh0bWxcbiAgICAvLyBmaWxlIGFuZCBub2RlX21vZHVsZXMgYXJlIHVuZGVyIHRoZSBzYW1lIGZvbGRlciB0aGVuIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIGlzIGZpbmVcbiAgICBpbWdQYXRoOiAnbm9kZV9tb2R1bGVzL3NiZ252aXovc3JjL2ltZycsXG4gICAgLy8gV2hldGhlciB0byBmaXQgbGFiZWxzIHRvIG5vZGVzXG4gICAgZml0TGFiZWxzVG9Ob2RlczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgZml0TGFiZWxzVG9JbmZvYm94ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIC8vIGR5bmFtaWMgbGFiZWwgc2l6ZSBpdCBtYXkgYmUgJ3NtYWxsJywgJ3JlZ3VsYXInLCAnbGFyZ2UnXG4gICAgZHluYW1pY0xhYmVsU2l6ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuICdyZWd1bGFyJztcbiAgICB9LFxuICAgIC8vIFdoZXRoZXIgdG8gaW5mZXIgcGFyZW50IG5vZGUgb24gbG9hZCBcbiAgICBpbmZlck5lc3RpbmdPbkxvYWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIC8vIGludGlhbCBjb21wb3VuZCBwYWRkaW5nIGZvciBhbGwgY29tcG91bmQgbm9kZXMgXG4gICAgY29tcG91bmRQYWRkaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIGltcHJvdmVGbG93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLy8gV2hldGhlciB0byBhZGp1c3Qgbm9kZSBsYWJlbCBmb250IHNpemUgYXV0b21hdGljYWxseS5cbiAgICAvLyBJZiB0aGlzIG9wdGlvbiByZXR1cm4gZmFsc2UgZG8gbm90IGFkanVzdCBsYWJlbCBzaXplcyBhY2NvcmRpbmcgdG8gbm9kZSBoZWlnaHQgdXNlcyBub2RlLmRhdGEoJ2ZvbnQtc2l6ZScpXG4gICAgLy8gaW5zdGVhZCBvZiBkb2luZyBpdC5cbiAgICBhZGp1c3ROb2RlTGFiZWxGb250U2l6ZUF1dG9tYXRpY2FsbHk6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAvLyBleHRyYSBwYWRkaW5nIGZvciBjb21wb3VuZCBub2RlcyBleGNlcHQgZm9yIGNvbXBsZXhlc1xuICAgIGV4dHJhQ29tcGFydG1lbnRQYWRkaW5nOiAxNCxcblxuICAgIC8vZXh0cmEgcGFkZGluZyBmb3IgY29tcGxleCBjb21wb3VuZCBub2RlcywgcmVmZXIgdG8gZWxlbWVudFV0aWxpdGllcy5nZXRDb21wbGV4UGFkZGluZyBmdW5jdGlvbiB0byBzZWUgZGV0YWlsc1xuICAgIGV4dHJhQ29tcGxleFBhZGRpbmc6IDEwLFxuICAgIC8vIFdldGhlciB0byBkaXNwbGF5IHRoZSBjb21wbGV4J3MgbGFiZWxzLCBsaWtlIGNvbXBhcnRtZW50cy5cbiAgICAvLyBXaWxsIGFsc28gaW5jcmVhc2UgdGhlIHBhZGRpbmdzIGJ5IGV4dHJhQ29tcG91bmRQYWRkaW5nIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIG5hbWUuXG4gICAgc2hvd0NvbXBsZXhOYW1lOiB0cnVlLFxuICAgIC8vIFRoZSBzZWxlY3RvciBvZiB0aGUgY29tcG9uZW50IGNvbnRhaW5pbmcgdGhlIHNiZ24gbmV0d29ya1xuICAgIG5ldHdvcmtDb250YWluZXJTZWxlY3RvcjogJyNzYmduLW5ldHdvcmstY29udGFpbmVyJyxcbiAgICAvLyBXaGV0aGVyIHRoZSBhY3Rpb25zIGFyZSB1bmRvYWJsZSwgcmVxdWlyZXMgY3l0b3NjYXBlLXVuZG8tcmVkbyBleHRlbnNpb25cbiAgICB1bmRvYWJsZTogdHJ1ZVxuICB9O1xuXG4gIHZhciBvcHRpb25VdGlsaXRpZXMgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgfTtcblxuICAvLyBFeHRlbmQgdGhlIGRlZmF1bHRzIG9wdGlvbnMgd2l0aCB0aGUgdXNlciBvcHRpb25zXG4gIG9wdGlvblV0aWxpdGllcy5leHRlbmRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKHZhciBwcm9wIGluIGRlZmF1bHRzKSB7XG4gICAgICByZXN1bHRbcHJvcF0gPSBkZWZhdWx0c1twcm9wXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBwcm9wIGluIG9wdGlvbnMpIHtcbiAgICAgIHJlc3VsdFtwcm9wXSA9IG9wdGlvbnNbcHJvcF07XG4gICAgfVxuXG4gICAgb3B0aW9uVXRpbGl0aWVzLm9wdGlvbnMgPSByZXN1bHQ7XG5cbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfTtcblxuICBvcHRpb25VdGlsaXRpZXMuZ2V0T3B0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gb3B0aW9uVXRpbGl0aWVzLm9wdGlvbnM7XG4gIH07XG5cbiAgcmV0dXJuIG9wdGlvblV0aWxpdGllcztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGpzb25Ub1NiZ25tbCwgZWxlbWVudFV0aWxpdGllcywgY3k7XG4gIFxuICAgIGZ1bmN0aW9uIHNiZ25tbFRvQ2QocGFyYW0pIHtcbiAgICAgIGpzb25Ub1NiZ25tbCA9IHBhcmFtLmpzb25Ub1NiZ25tbENvbnZlcnRlcjtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICAgICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICAgIH1cbiAgXG4gXG4gICAgc2Jnbm1sVG9DZC5jb252ZXJ0ID0gZnVuY3Rpb24gKHhtbCwgY2FsbGJhY2spIHtcblxuICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB0eXBlOiAncG9zdCcsICAgICAgICAgICAgIFxuICAgICAgICAgICAgdXJsOiBcImh0dHA6Ly93ZWIubmV3dGVkaXRvci5vcmc6ODA4MC9zYmdubWwyY2RcIixcbiAgICAgICAgICAgIGRhdGE6IHhtbCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZGF0YSk7ICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKFhNTEh0dHBSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICBcbiAgICAgICAgXG4gICAgfVxuXG4gICAgcmV0dXJuIHNiZ25tbFRvQ2Q7XG4gIFxuICB9XG4gIFxuXG4iLCJ2YXIgbGlic2JnbmpzID0gcmVxdWlyZSgnbGlic2Jnbi5qcycpO1xudmFyIHBhcnNlU3RyaW5nID0gcmVxdWlyZSgneG1sMmpzJykucGFyc2VTdHJpbmc7XG52YXIgbGliVXRpbGl0aWVzID0gcmVxdWlyZSgnLi9saWItdXRpbGl0aWVzJyk7XG52YXIgbGlicyA9IGxpYlV0aWxpdGllcy5nZXRMaWJzKCk7XG52YXIgalF1ZXJ5ID0gJCA9IGxpYnMualF1ZXJ5O1xudmFyIGNsYXNzZXMgPSByZXF1aXJlKCcuL2NsYXNzZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGVtZW50VXRpbGl0aWVzLCBncmFwaFV0aWxpdGllcywgaGFuZGxlZEVsZW1lbnRzLG1haW5VdGlsaXRpZXM7XG5cbiAgZnVuY3Rpb24gc2Jnbm1sVG9Kc29uIChwYXJhbSkge1xuICAgIG9wdGlvblV0aWxpdGllcyA9IHBhcmFtLm9wdGlvblV0aWxpdGllcztcbiAgICBvcHRpb25zID0gb3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgICBncmFwaFV0aWxpdGllcyA9IHBhcmFtLmdyYXBoVXRpbGl0aWVzO1xuICAgIG1haW5VdGlsaXRpZXMgPSBwYXJhbS5tYWluVXRpbGl0aWVzO1xuXG4gICAgaGFuZGxlZEVsZW1lbnRzID0ge307XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmVsZW1lbnRUeXBlcy5mb3JFYWNoKCBmdW5jdGlvbiggdHlwZSApIHtcbiAgICAgIGhhbmRsZWRFbGVtZW50c1sgdHlwZSBdID0gdHJ1ZTtcbiAgICB9ICk7XG4gIH1cblxuICBzYmdubWxUb0pzb24uaW5zZXJ0ZWROb2RlcyA9IHt9O1xuXG4gIHNiZ25tbFRvSnNvbi5tYXAgPSB1bmRlZmluZWQ7XG4gIHNiZ25tbFRvSnNvbi5jYWxjdWxhdGVkQ29tcG91bmRQYWRkaW5nID0gdW5kZWZpbmVkO1xuXG4gIHNiZ25tbFRvSnNvbi5nZXRBbGxDb21wYXJ0bWVudHMgPSBmdW5jdGlvbiAoZ2x5cGhMaXN0KSB7XG4gICAgdmFyIGNvbXBhcnRtZW50cyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaExpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChnbHlwaExpc3RbaV0uY2xhc3NfID09ICdjb21wYXJ0bWVudCcpIHtcbiAgICAgICAgdmFyIGNvbXBhcnRtZW50ID0gZ2x5cGhMaXN0W2ldO1xuICAgICAgICB2YXIgYmJveCA9IGNvbXBhcnRtZW50LmJib3g7XG4gICAgICAgIGNvbXBhcnRtZW50cy5wdXNoKHtcbiAgICAgICAgICAneCc6IHBhcnNlRmxvYXQoYmJveC54KSxcbiAgICAgICAgICAneSc6IHBhcnNlRmxvYXQoYmJveC55KSxcbiAgICAgICAgICAndyc6IHBhcnNlRmxvYXQoYmJveC53KSxcbiAgICAgICAgICAnaCc6IHBhcnNlRmxvYXQoYmJveC5oKSxcbiAgICAgICAgICAnaWQnOiBjb21wYXJ0bWVudC5pZFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wYXJ0bWVudHMuc29ydChmdW5jdGlvbiAoYzEsIGMyKSB7XG4gICAgICBpZiAoYzEuaCAqIGMxLncgPCBjMi5oICogYzIudykge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoYzEuaCAqIGMxLncgPiBjMi5oICogYzIudykge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvbXBhcnRtZW50cztcbiAgfTtcblxuICBzYmdubWxUb0pzb24uaXNJbkJvdW5kaW5nQm94ID0gZnVuY3Rpb24gKGJib3gxLCBiYm94Mikge1xuICAgIGlmIChiYm94MS54ID4gYmJveDIueCAmJlxuICAgICAgICBiYm94MS55ID4gYmJveDIueSAmJlxuICAgICAgICBiYm94MS54ICsgYmJveDEudyA8IGJib3gyLnggKyBiYm94Mi53ICYmXG4gICAgICAgIGJib3gxLnkgKyBiYm94MS5oIDwgYmJveDIueSArIGJib3gyLmgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmJib3hQcm9wID0gZnVuY3Rpb24gKGVsZSkge1xuXG4gICAgaWYoZWxlLmJib3hDYWxjdWxhdGVkKXtcbiAgICAgIHJldHVybiBlbGUuYmJveDtcbiAgICB9XG5cbiAgICBlbGUuYmJveENhbGN1bGF0ZWQgPSB0cnVlO1xuICAgIHZhciBjaGlsZE5vZGVzID0gZWxlLmdseXBoTWVtYmVycztcbiAgICAvL2V4Y2x1ZGUgc3RhdGUgdmFyaWFibGVzIGFuZCB1bml0cyBvZiBpbmZvcm1hdGlvbiBmcm9tIGNoaWxkIG1lbWJlcnNcbiAgICBjaGlsZE5vZGVzID0gY2hpbGROb2Rlcy5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpeyByZXR1cm4gY2hpbGQuY2xhc3NfICE9IFwic3RhdGUgdmFyaWFibGVcIiAmJiBjaGlsZC5jbGFzc18gIT0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCJ9KTtcbiAgICB2YXIgYmJveCA9IHt9O1xuICAgIGJib3gueCA9IGVsZS5iYm94Lng7XG4gICAgYmJveC55ID0gZWxlLmJib3gueTtcbiAgICBiYm94LncgPSBlbGUuYmJveC53O1xuICAgIGJib3guaCA9IGVsZS5iYm94Lmg7XG4gICAgLy9pZiBpdCBpcyBzaW1wbGUgbm9kZSByZXR1cm4gYmJveFxuICAgIGlmKGNoaWxkTm9kZXMubGVuZ3RoIDw9IDApe1xuICAgICAgYmJveC54ID0gcGFyc2VGbG9hdChiYm94LngpICsgcGFyc2VGbG9hdChiYm94LncpIC8gMjtcbiAgICAgIGJib3gueSA9IHBhcnNlRmxvYXQoYmJveC55KSArIHBhcnNlRmxvYXQoYmJveC5oKSAvIDI7XG4gICAgIFxuICAgICAgcmV0dXJuIGJib3g7XG4gICAgfWVsc2UgaWYgKGVsZS5leHRlbnNpb24gJiYgZWxlLmV4dGVuc2lvbi5oYXMoJ2V4dHJhSW5mbycpKSB7Ly8gaWYgbmV3dCBmaWxlIHRoZW4gZXh0cmFpbmZvIG9uIHRoZSBjb21wb3VuZCBub2RlIGV4aXN0c1xuICAgICAgICB2YXIgeG1sID0gZWxlLmV4dGVuc2lvbi5nZXQoJ2V4dHJhSW5mbycpO1xuICAgICAgICB2YXIgZXh0cmFJbmZvO1xuICAgICAgICBwYXJzZVN0cmluZyh4bWwsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICAgICBleHRyYUluZm8gPSByZXN1bHQuZXh0cmFJbmZvO1xuICAgICAgICB9KTtcbiAgICAgICAgZWxlLm9yaWdpbmFsVz0gYmJveC53O1xuICAgICAgICBlbGUub3JpZ2luYWxIID0gYmJveC5oO1xuICAgICAgICBiYm94LnggPSBwYXJzZUZsb2F0KGJib3gueCkgKyBwYXJzZUZsb2F0KGJib3gudykgLyAyO1xuICAgICAgICBiYm94LnkgPSBwYXJzZUZsb2F0KGJib3gueSkgKyBwYXJzZUZsb2F0KGJib3guaCkgLyAyO1xuICAgICAgICBiYm94LncgPSBwYXJzZUZsb2F0KGV4dHJhSW5mby53KTtcbiAgICAgICAgYmJveC5oID0gcGFyc2VGbG9hdChleHRyYUluZm8uaCk7ICAgICAgIFxuICAgICAgICBlbGUubWluV2lkdGggPSBwYXJzZUZsb2F0KGV4dHJhSW5mby5taW5XKTtcbiAgICAgICAgZWxlLm1pbkhlaWdodCA9IHBhcnNlRmxvYXQoZXh0cmFJbmZvLm1pbkgpO1xuICAgICAgICBlbGUubWluV2lkdGhCaWFzTGVmdCA9IHBhcnNlRmxvYXQoZXh0cmFJbmZvLldMQmlhcyk7XG4gICAgICAgIGVsZS5taW5XaWR0aEJpYXNSaWdodCA9IHBhcnNlRmxvYXQoZXh0cmFJbmZvLldSQmlhcyk7XG4gICAgICAgIGVsZS5taW5IZWlnaHRCaWFzQm90dG9tID0gcGFyc2VGbG9hdChleHRyYUluZm8uSEJCaWFzKTtcbiAgICAgICAgZWxlLm1pbkhlaWdodEJpYXNUb3AgPSBwYXJzZUZsb2F0KGV4dHJhSW5mby5IVEJpYXMpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIGJib3g7XG5cbiAgICAgICAgXG4gICAgIH1lbHNle1xuXG4gICAgIC8qICB2YXIgc3R5bGVzO1xuICAgICAgaWYgKHRoaXMubWFwLmV4dGVuc2lvbiAmJiB0aGlzLm1hcC5leHRlbnNpb24uaGFzKCdyZW5kZXJJbmZvcm1hdGlvbicpKSB7IC8vIHJlbmRlciBleHRlbnNpb24gd2FzIGZvdW5kXG4gICAgICAgIHN0eWxlcyA9IHRoaXMubWFwLmV4dGVuc2lvbi5nZXQoJ3JlbmRlckluZm9ybWF0aW9uJykubGlzdE9mU3R5bGVzO1xuICAgICAgICBpZihzdHlsZXMgICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIHN0eWxlcyA9IHN0eWxlcy5zdHlsZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAqL1xuICAgICAvKiAgdmFyIGNvbXBvdW5kUGFkZGluZyA9IHBhcnNlRmxvYXQobWFwUHJvcGVydGllcy5jb21wb3VuZFBhZGRpbmcpO1xuICAgICAgdmFyIGV4dHJhQ29tcGFydG1lbnRQYWRkaW5nID0gcGFyc2VGbG9hdChtYXBQcm9wZXJ0aWVzLmV4dHJhQ29tcGFydG1lbnRQYWRkaW5nKTsgKi9cbiAgICAgIFxuICAgICBcbiAgICAgIHZhciBwYWRkaW5nID0gdGhpcy5jYWxjdWxhdGVFbGVtZW50UGFkZGluZyhlbGUpO1xuICAgICAgaWYoZWxlLmNsYXNzXyA9PSBcImNvbXBsZXhcIil7XG4gICAgICAgIGVsZS5jb21wbGV4Q2FsY3VsYXRlZFBhZGRpbmcgPSBwYWRkaW5nO1xuICAgICAgfVxuICAgICAgXG4gICAgICB2YXIgbWluTGVmdCwgbWF4UmlnaHQsIG1pblRvcCwgbWF4Qm90dG9tLCBjaGlsZHJlbkJib3hXLCBjaGlsZHJlbkJib3hILG1pbkxlZnRCb3JkZXIsbWF4UmlnaHRCb3JkZXIsbWluVG9wQm9yZGVyLG1heEJvdHRvbUJvcmRlcjsgXG4gICAgICB2YXIgZnJvbUluZm9Cb3ggPSBmYWxzZTtcbiAgICAgIC8vIFRyYXZlcnNlIHRoZSBvdGhlciBjaGlsZHJlbiBhbmQgdXBkYXRlIHRoZSBleHRyZW1lIHZhbHVlc1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2ldO1xuICAgICAgXG4gICAgICAgIHZhciBjaGlsZE5vZGVCYm94ID0gdGhpcy5iYm94UHJvcChjaGlsZE5vZGUpO1xuICAgICAgIFxuICAgICAgICBjaGlsZE5vZGUuYmJveCA9IGNoaWxkTm9kZUJib3g7XG4gICAgICAgIHZhciBib3JkZXJXaWR0aCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoY2hpbGROb2RlLmNsYXNzXylbXCJib3JkZXItd2lkdGhcIl07IFxuICAgICAgICB2YXIgY2hpbGRQYWRkaW5nID0gdGhpcy5jYWxjdWxhdGVFbGVtZW50UGFkZGluZyhjaGlsZE5vZGUpO1xuICAgICAgICAvL3ZhciBjaGlsZFN0eWxlID0gc3R5bGVzLmZpbHRlcihzdHlsZSA9PnsgcmV0dXJuIHN0eWxlLmlkTGlzdCA9PSBjaGlsZE5vZGUuaWR9KTtcbiAgICAgICBcbiAgICAgICAvKiAgaWYoY2hpbGRTdHlsZS5sZW5ndGggPiAwICYmIGNoaWxkU3R5bGVbMF0ucmVuZGVyR3JvdXAgIT09IHVuZGVmaW5lZCl7XG4gICAgICAgICAgYm9yZGVyV2lkdGggPSBjaGlsZFN0eWxlWzBdLnJlbmRlckdyb3VwLnN0cm9rZVdpZHRoO1xuICAgICAgICB9ICovXG5cbiAgICAgICAgdmFyIGxlZnQgPSBjaGlsZE5vZGVCYm94LnggLSBjaGlsZE5vZGVCYm94LncvMiAtIGNoaWxkUGFkZGluZyA7XG4gICAgICAgIHZhciByaWdodCA9IGNoaWxkTm9kZUJib3gueCArIGNoaWxkTm9kZUJib3gudy8yICsgY2hpbGRQYWRkaW5nO1xuICAgICAgICB2YXIgdG9wID0gY2hpbGROb2RlQmJveC55ICAtIGNoaWxkTm9kZUJib3guaC8yIC0gY2hpbGRQYWRkaW5nO1xuICAgICAgICB2YXIgYm90dG9tID0gY2hpbGROb2RlQmJveC55ICsgY2hpbGROb2RlQmJveC5oLzIgKyBjaGlsZFBhZGRpbmc7XG4gICAgICAgIHZhciBzdGF0ZUFuZEluZm9zID0gY2hpbGROb2RlLmdseXBoTWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpeyByZXR1cm4gY2hpbGQuY2xhc3NfID09IFwic3RhdGUgdmFyaWFibGVcIiB8fCBjaGlsZC5jbGFzc18gPT0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCJ9KTtcbiAgICAgICAgaWYoc3RhdGVBbmRJbmZvcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIGZvcih2YXIgayA9IDAgOyBrPHN0YXRlQW5kSW5mb3MubGVuZ3RoOyBrKyspe1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZUJib3ggPSBzdGF0ZUFuZEluZm9zW2tdLmJib3g7XG4gICAgICAgICAgICAgICAgaWYobWluTGVmdCA9PT0gdW5kZWZpbmVkIHx8IHN0YXRlQmJveC54IDwgbWluTGVmdCl7XG4gICAgICAgICAgICAgICAgICBtaW5MZWZ0ID0gc3RhdGVCYm94Lng7XG4gICAgICAgICAgICAgICAgICBmcm9tSW5mb0JveCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBtaW5MZWZ0Qm9yZGVyID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihtYXhSaWdodCA9PT0gdW5kZWZpbmVkIHx8IHN0YXRlQmJveC54ICsgc3RhdGVCYm94LncgPiBtYXhSaWdodCl7XG4gICAgICAgICAgICAgICAgICBtYXhSaWdodCA9IHN0YXRlQmJveC54ICsgc3RhdGVCYm94Lnc7XG4gICAgICAgICAgICAgICAgICBmcm9tSW5mb0JveCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBtYXhSaWdodEJvcmRlciA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYobWluVG9wID09PSB1bmRlZmluZWQgfHwgc3RhdGVCYm94LnkgPCBtaW5Ub3Ape1xuICAgICAgICAgICAgICAgICAgbWluVG9wID0gc3RhdGVCYm94Lnk7XG4gICAgICAgICAgICAgICAgICBmcm9tSW5mb0JveCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBtaW5Ub3BCb3JkZXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKG1heEJvdHRvbSA9PT0gdW5kZWZpbmVkIHx8IHN0YXRlQmJveC55ICsgc3RhdGVCYm94LmggPiBtYXhCb3R0b20pe1xuICAgICAgICAgICAgICAgICAgbWF4Qm90dG9tID0gc3RhdGVCYm94LnkgKyBzdGF0ZUJib3guaDtcbiAgICAgICAgICAgICAgICAgIGZyb21JbmZvQm94ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIG1heEJvdHRvbUJvcmRlciA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5MZWZ0ID09PSB1bmRlZmluZWQgfHwgbGVmdCA8IG1pbkxlZnQpIHtcbiAgICAgICAgICBtaW5MZWZ0ID0gbGVmdDtcbiAgICAgICAgICBmcm9tSW5mb0JveCA9IGZhbHNlO1xuICAgICAgICAgIG1pbkxlZnRCb3JkZXIgPSBib3JkZXJXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXhSaWdodCA9PT0gdW5kZWZpbmVkIHx8IHJpZ2h0ID4gbWF4UmlnaHQpIHtcbiAgICAgICAgICBtYXhSaWdodCA9IHJpZ2h0O1xuICAgICAgICAgIGZyb21JbmZvQm94ID0gZmFsc2U7XG4gICAgICAgICAgbWF4UmlnaHRCb3JkZXIgPSBib3JkZXJXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtaW5Ub3AgPT09IHVuZGVmaW5lZCB8fCB0b3AgPCBtaW5Ub3ApIHtcbiAgICAgICAgICBtaW5Ub3AgPSB0b3A7XG4gICAgICAgICAgZnJvbUluZm9Cb3ggPSBmYWxzZTtcbiAgICAgICAgICBtaW5Ub3BCb3JkZXIgPSBib3JkZXJXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXhCb3R0b20gPT09IHVuZGVmaW5lZCB8fCBib3R0b20gPiBtYXhCb3R0b20pIHtcbiAgICAgICAgICBtYXhCb3R0b20gPSBib3R0b207XG4gICAgICAgICAgZnJvbUluZm9Cb3ggPSBmYWxzZTtcbiAgICAgICAgICBtYXhCb3R0b21Cb3JkZXIgPSBib3JkZXJXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgYXZlcmFnZUJvcmRlcldpZHRoVyA9ICAobWluTGVmdEJvcmRlciArIG1heFJpZ2h0Qm9yZGVyKS8yO1xuICAgICAgdmFyIGF2ZXJhZ2VCb3JkZXJXaWR0aEggPSAobWluVG9wQm9yZGVyICsgbWF4Qm90dG9tQm9yZGVyKS8yO1xuICAgICAgLy8gVGhlIHNpemVzIG9mIGNoaWxkcmVuIGJib3ggYXJlIGRldGVybWluZWQgYnkgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgZXh0cmVtZSBjb29yZGluYXRlc1xuICAgICAgY2hpbGRyZW5CYm94VyA9IG1heFJpZ2h0IC0gbWluTGVmdCArIDI7IC8vIDIgaXMgZnJvbSBjeXRvc2NhcGUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgaW5mb2JveGVzXG4gICAgICBjaGlsZHJlbkJib3hIID0gbWF4Qm90dG9tIC0gbWluVG9wICsgMjtcbiAgICAgXG4gICAgIFxuICAgIFxuICAgICAgLy8gSWYgY2hpbGRyZW4gYmJveCB3aWR0aCBpcyBsZXNzIHRoYW4gbm9kZSBiYm94IHdpZHRoICsgcGFkZGluZ3Mgc2V0IG1pbldpZHRoLCBhbmQgaG9yaXpvbnRhbCBiaWFzZXNcbiAgICAgIGlmIChOdW1iZXIoKGNoaWxkcmVuQmJveFcgKyAyICogcGFkZGluZyArIGF2ZXJhZ2VCb3JkZXJXaWR0aFcgKyAoZnJvbUluZm9Cb3ggPyAgMiAqIGJvcmRlcldpZHRoIDogMCkpLnRvRml4ZWQoMikpIDwgTnVtYmVyKGJib3gudy50b0ZpeGVkKDIpKSkge1xuXG4gICAgICAgIC8vZWxlLm1pbldpZHRoID0gYmJveC53IC0gMiBwYWRkaW5nICBjYWxjdWxhdGUgYmFkZGluZyBmaXJzdFxuICAgICAgICBlbGUubWluV2lkdGggPSAgYmJveC53IC0gMiAqIHBhZGRpbmc7XG4gICAgICAgIHZhciBleHRyYUxlZnQgPSAgTnVtYmVyKChtaW5MZWZ0IC0gYmJveC54ICAtIHBhZGRpbmcgLSBtaW5MZWZ0Qm9yZGVyLzIgLTEpLnRvRml4ZWQoMikpIDtcbiAgICAgICAgdmFyIGV4dHJhUmlnaHQgPSBOdW1iZXIoKChiYm94LnggKyBiYm94LncpIC0gbWF4UmlnaHQgIC0gcGFkZGluZyAtIG1heFJpZ2h0Qm9yZGVyLzIgLSAxKS50b0ZpeGVkKDIpKSA7XG5cbiAgICAgICBcbiAgICAgICAgZWxlLm1pbldpZHRoQmlhc0xlZnQgPSBleHRyYUxlZnQgLyAoZXh0cmFMZWZ0ICsgZXh0cmFSaWdodCkgKiAxMDA7XG4gICAgICAgIGVsZS5taW5XaWR0aEJpYXNSaWdodCA9IDEwMCAtIGVsZS5taW5XaWR0aEJpYXNMZWZ0O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBjaGlsZHJlbiBiYm94IGhlaWdodCBpcyBiaWdnZXIgdGhhbiBub2RlIGJib3ggaGVpZ2h0IHNldCBtaW5IZWlnaHQsIGFuZCB2ZXJ0aWNhbCBiaWFzZXNcbiAgICAgIGlmIChOdW1iZXIoKGNoaWxkcmVuQmJveEggKyAyICogcGFkZGluZyArIGF2ZXJhZ2VCb3JkZXJXaWR0aEggKyAoZnJvbUluZm9Cb3ggPyAgMiAqIGJvcmRlcldpZHRoIDogMCkpLnRvRml4ZWQoMikpIDwgTnVtYmVyKGJib3guaC50b0ZpeGVkKDIpKSkge1xuICAgICAgICBlbGUubWluSGVpZ2h0ID0gYmJveC5oIC0gMiAqIHBhZGRpbmc7XG4gICAgICAgIHZhciBleHRyYVRvcCA9IE51bWJlcigobWluVG9wIC0gYmJveC55IC0gcGFkZGluZyAtIG1pblRvcEJvcmRlci8yIC0gMSkudG9GaXhlZCgyKSk7XG4gICAgICAgIHZhciBleHRyYUJvdHRvbSA9IE51bWJlcigoKGJib3gueSArIGJib3guaCkgLSBtYXhCb3R0b20gLSBwYWRkaW5nIC0gbWF4Qm90dG9tQm9yZGVyLzIgLSAxKS50b0ZpeGVkKDIpKTsgICAgICAgIFxuXG4gICAgICAgIGVsZS5taW5IZWlnaHRCaWFzVG9wID0gZXh0cmFUb3AgLyAoZXh0cmFUb3AgKyBleHRyYUJvdHRvbSkgKiAxMDA7XG4gICAgICAgIGVsZS5taW5IZWlnaHRCaWFzQm90dG9tID0gMTAwIC0gZWxlLm1pbkhlaWdodEJpYXNUb3A7XG4gICAgICB9XG4gICAgICBcblxuICAgICAgLy8gc2V0IHBvc2l0aW9ucyBhcyBjZW50ZXJcblxuICAgICAgYmJveC54ID0gcGFyc2VGbG9hdChiYm94LngpICsgcGFyc2VGbG9hdChiYm94LncpIC8gMjtcbiAgICAgIGJib3gueSA9IHBhcnNlRmxvYXQoYmJveC55KSArIHBhcnNlRmxvYXQoYmJveC5oKSAvIDI7XG4gICAgICAgLy9iYm94LnggPSAobWluTGVmdCArIG1heFJpZ2h0KSAvMjtcbiAgICAgLy8gYmJveC55ID0gKG1pblRvcCArIG1heEJvdHRvbSkgLyAyO1xuICAgICAgYmJveC53ID0gYmJveC53IC0gMiAqIHBhZGRpbmcgLSBhdmVyYWdlQm9yZGVyV2lkdGhXO1xuICAgICAgYmJveC5oID0gYmJveC5oIC0gMiAqIHBhZGRpbmcgLSBhdmVyYWdlQm9yZGVyV2lkdGhIO1xuICAgICAgYmJveC53ID0gYmJveC53IDwgMCA/IDAgOiBiYm94Lnc7XG4gICAgICBiYm94LmggPSBiYm94LmggPCAwID8gMCA6IGJib3guaDtcblxuICAgICAgcmV0dXJuIGJib3g7XG4gICAgIH1cbiAgICBcbiAgfTtcblxuICBzYmdubWxUb0pzb24uc3RhdGVBbmRJbmZvQmJveFByb3AgPSBmdW5jdGlvbiAoZWxlLCBwYXJlbnRCYm94KSB7XG4gICAgLy8gZG9uJ3QgY29weSBkaXJlY3RseSBlbGUuYm94IGJlY2F1c2UgaXQgY29udGFpbnMgb3RoZXIgdGhpbmdzIHRoYW4geCB5IHcgaFxuICAgIHZhciBiYm94ID0ge307XG5cbiAgICBpZihlbGUuYmJveCAhPSBudWxsKXtcbiAgICAgIGJib3gueCA9IGVsZS5iYm94LnggO1xuICAgICAgYmJveC55ID0gZWxlLmJib3gueTtcbiAgICAgIGJib3gudyA9IGVsZS5iYm94Lnc7XG4gICAgICBiYm94LmggPSBlbGUuYmJveC5oO1xuICAgIH1lbHNle1xuICAgICAgYmJveC54ID0gMCA7XG4gICAgICBiYm94LnkgPSAwO1xuICAgICAgYmJveC53ID0gMTI7XG4gICAgICBiYm94LmggPSAxMjtcbiAgICB9XG4gICBcbiAgIFxuXG5cbiAgICByZXR1cm4gYmJveDtcbiAgfTtcbiAgc2Jnbm1sVG9Kc29uLmNhbGN1bGF0ZUVsZW1lbnRQYWRkaW5nID0gZnVuY3Rpb24oZWxlKXtcbiAgICAgIHZhciBwYWRkaW5nID0gMCA7XG4gICAgIFxuICAgICAgdmFyIGNoaWxkTm9kZXMgPSBlbGUuZ2x5cGhNZW1iZXJzO1xuICAgIC8vZXhjbHVkZSBzdGF0ZSB2YXJpYWJsZXMgYW5kIHVuaXRzIG9mIGluZm9ybWF0aW9uIGZyb20gY2hpbGQgbWVtYmVyc1xuICAgICAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKXsgcmV0dXJuIGNoaWxkLmNsYXNzXyAhPSBcInN0YXRlIHZhcmlhYmxlXCIgJiYgY2hpbGQuY2xhc3NfICE9IFwidW5pdCBvZiBpbmZvcm1hdGlvblwifSk7XG4gICAgICBpZihjaGlsZE5vZGVzLmxlbmd0aCA8PSAwICkgcmV0dXJuIDA7XG4gICAgICB2YXIgY29tcG91bmRQYWRkaW5nID0gdHlwZW9mIG9wdGlvbnMuY29tcG91bmRQYWRkaW5nID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5jb21wb3VuZFBhZGRpbmcuY2FsbCgpIDogb3B0aW9ucy5jb21wb3VuZFBhZGRpbmc7XG4gICAgIC8vIH0gXG4gICAgICBpZihlbGUuY2xhc3NfID09IFwiY29tcGxleFwiKXtcbiAgICAgICAgdmFyIGNvbXBsZXhQYWRkaW5nID0gMDtcbiAgICAgICAgdmFyIGV4dHJhQ29tcGxleFBhZGRpbmcgPSB0eXBlb2Ygb3B0aW9ucy5leHRyYUNvbXBsZXhQYWRkaW5nID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5leHRyYUNvbXBsZXhQYWRkaW5nLmNhbGwoKSA6IG9wdGlvbnMuZXh0cmFDb21wbGV4UGFkZGluZztcbiAgICAgICAgY29tcGxleFBhZGRpbmcgPSBjb21wb3VuZFBhZGRpbmcgPCA1ID8gNSA6IGNvbXBvdW5kUGFkZGluZzsgICAgICAgXG5cbiAgICAgICAgdmFyIHN0YXRlQW5kSW5mb3MgPSBlbGUuZ2x5cGhNZW1iZXJzLmZpbHRlcihmdW5jdGlvbihjaGlsZCl7IHJldHVybiBjaGlsZC5jbGFzc18gPT0gXCJzdGF0ZSB2YXJpYWJsZVwiIHx8IGNoaWxkLmNsYXNzXyA9PSBcInVuaXQgb2YgaW5mb3JtYXRpb25cIn0pO1xuICAgICAgICAgICAgXG4gICAgICAgIGlmKGVsZS5sYWJlbCAhPSB1bmRlZmluZWQgJiYgZWxlLmxhYmVsLnRleHQgIT0gdW5kZWZpbmVkICYmIGVsZS5sYWJlbC50ZXh0Lmxlbmd0aCA+IDApeyBcbiAgICAgICAgIFxuICAgICAgICAgICAgICBjb21wbGV4UGFkZGluZyA9IGNvbXBsZXhQYWRkaW5nICsgMC41ICogZXh0cmFDb21wbGV4UGFkZGluZztcbiAgICAgICAgICAgICAgdmFyIGhhc1RvcEJvdHRvbUluZm8gPSBmYWxzZTtcbiAgICAgICAgICAgICAgc3RhdGVBbmRJbmZvcy5mb3JFYWNoKGZ1bmN0aW9uKHN0YXRlQW5kSW5mbyl7XG4gICAgICAgICAgICAgICAgaWYoTnVtYmVyKChzdGF0ZUFuZEluZm8uYmJveC55ICsgc3RhdGVBbmRJbmZvLmJib3guaC8yKS50b0ZpeGVkKDIpKSA9PSBOdW1iZXIoKGVsZS5iYm94LnkgKyBlbGUuYmJveC5oKS50b0ZpeGVkKDIpKSl7XG4gICAgICAgICAgICAgICAgICBoYXNUb3BCb3R0b21JbmZvID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICBcbiAgICAgICAgICAgICAgaWYoaGFzVG9wQm90dG9tSW5mbyl7XG4gICAgICAgICAgICAgICAgY29tcGxleFBhZGRpbmcgPSBjb21wbGV4UGFkZGluZyArIDAuNSAqIGV4dHJhQ29tcGxleFBhZGRpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgfWVsc2UgaWYoc3RhdGVBbmRJbmZvcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICBjb21wbGV4UGFkZGluZyArPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFkZGluZyA9IGNvbXBsZXhQYWRkaW5nO1xuXG4gICAgICB9ZWxzZXtcbiAgICAgICAgdmFyIGV4dHJhQ29tcGFydG1lbnRQYWRkaW5nID0gdHlwZW9mIG9wdGlvbnMuZXh0cmFDb21wYXJ0bWVudFBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmV4dHJhQ29tcGFydG1lbnRQYWRkaW5nLmNhbGwoKSA6IG9wdGlvbnMuZXh0cmFDb21wYXJ0bWVudFBhZGRpbmc7XG4gICAgICAgIHBhZGRpbmcgPSBleHRyYUNvbXBhcnRtZW50UGFkZGluZyArICBjb21wb3VuZFBhZGRpbmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYWRkaW5nO1xuICAgICAgXG4gIH07XG4gIHNiZ25tbFRvSnNvbi5maW5kQ2hpbGROb2RlcyA9IGZ1bmN0aW9uIChlbGUsIGNoaWxkVGFnTmFtZSkge1xuICAgIC8vIGZpbmQgY2hpbGQgbm9kZXMgYXQgZGVwdGggbGV2ZWwgb2YgMSByZWxhdGl2ZSB0byB0aGUgZWxlbWVudFxuICAgIHZhciBjaGlsZHJlbiA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IGVsZS5jaGlsZE5vZGVzW2ldO1xuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlID09PSAxICYmIGNoaWxkLnRhZ05hbWUgPT09IGNoaWxkVGFnTmFtZSkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5maW5kQ2hpbGROb2RlID0gZnVuY3Rpb24gKGVsZSwgY2hpbGRUYWdOYW1lKSB7XG4gICAgdmFyIG5vZGVzID0gdGhpcy5maW5kQ2hpbGROb2RlcyhlbGUsIGNoaWxkVGFnTmFtZSk7XG4gICAgcmV0dXJuIG5vZGVzLmxlbmd0aCA+IDAgPyBub2Rlc1swXSA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBzYmdubWxUb0pzb24uc3RhdGVBbmRJbmZvUHJvcCA9IGZ1bmN0aW9uIChlbGUsIHBhcmVudCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcGFyZW50QmJveCA9IHBhcmVudC5iYm94O1xuICAgIHZhciBzdGF0ZUFuZEluZm9BcnJheSA9IFtdO1xuXG4gICAgdmFyIGNoaWxkR2x5cGhzID0gZWxlLmdseXBoTWVtYmVyczsgLy8gdGhpcy5maW5kQ2hpbGROb2RlcyhlbGUsICdnbHlwaCcpO1xuXG4gICAgLy8gaWYgYSBiaW9sb2dpY2FsIGFjdGl2aXR5IG5vZGUgaGFzIG5vIHVuaXQgb2YgaW5mbywgaXQgbXVzdCBiZSBhIEJBIHBsYWluXG4gICAgaWYocGFyZW50LmNsYXNzID09IFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiICYmIGNoaWxkR2x5cGhzLmxlbmd0aCA9PSAwKSB7XG4gICAgICBwYXJlbnQuY2xhc3MgPSBcIkJBIHBsYWluXCI7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZEdseXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGdseXBoID0gY2hpbGRHbHlwaHNbaV07XG5cbiAgICAgIGlmIChnbHlwaC5jbGFzc18gIT09ICd1bml0IG9mIGluZm9ybWF0aW9uJyAmJiBnbHlwaC5jbGFzc18gIT09ICdzdGF0ZSB2YXJpYWJsZScpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBpbmZvID0ge307XG4gICAgICB2YXIgaW5mb2JveDtcbiAgICAgIHZhciBpbmZvYm94SWQgPSBnbHlwaC5pZDtcblxuICAgICAgaWYgKGdseXBoLmNsYXNzXyA9PT0gJ3VuaXQgb2YgaW5mb3JtYXRpb24nKSB7XG4gICAgICAgIGluZm9ib3ggPSBjbGFzc2VzLlVuaXRPZkluZm9ybWF0aW9uLmNvbnN0cnVjdCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgaW5mb2JveElkKTtcbiAgICAgICAgaWYoZ2x5cGguZW50aXR5KSB7XG4gICAgICAgICAgLy8gY2hhbmdlIHRoZSBwYXJlbnQgY2xhc3MgYWNjb3JkaW5nIHRvIGl0cyB0cnVlIGNsYXNzIG9mIGJpb2xvZ2ljYWwgYWN0aXZpdHlcbiAgICAgICAgICBzd2l0Y2goZ2x5cGguZW50aXR5Lm5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3Vuc3BlY2lmaWVkIGVudGl0eSc6ICAgIHBhcmVudC5jbGFzcyA9IFwiQkEgdW5zcGVjaWZpZWQgZW50aXR5XCI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2ltcGxlIGNoZW1pY2FsJzogICAgICAgcGFyZW50LmNsYXNzID0gXCJCQSBzaW1wbGUgY2hlbWljYWxcIjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtYWNyb21vbGVjdWxlJzogICAgICAgICBwYXJlbnQuY2xhc3MgPSBcIkJBIG1hY3JvbW9sZWN1bGVcIjsgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdudWNsZWljIGFjaWQgZmVhdHVyZSc6ICBwYXJlbnQuY2xhc3MgPSBcIkJBIG51Y2xlaWMgYWNpZCBmZWF0dXJlXCI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncGVydHVyYmF0aW9uJzogICAgICAgICAgcGFyZW50LmNsYXNzID0gXCJCQSBwZXJ0dXJiaW5nIGFnZW50XCI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnY29tcGxleCc6ICAgICAgICAgICAgICAgcGFyZW50LmNsYXNzID0gXCJCQSBjb21wbGV4XCI7IGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbmZvYm94LmxhYmVsID0ge1xuICAgICAgICAgICd0ZXh0JzogKGdseXBoLmxhYmVsICYmIGdseXBoLmxhYmVsLnRleHQpIHx8IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChnbHlwaC5jbGFzc18gPT09ICdzdGF0ZSB2YXJpYWJsZScpIHtcbiAgICAgICAgaW5mb2JveCA9IGNsYXNzZXMuU3RhdGVWYXJpYWJsZS5jb25zdHJ1Y3QodW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgaW5mb2JveElkKTtcblxuICAgICAgICB2YXIgc3RhdGUgPSBnbHlwaC5zdGF0ZTtcbiAgICAgICAgaW5mb2JveC5zdGF0ZS52YWx1ZSA9IChzdGF0ZSAmJiBzdGF0ZS52YWx1ZSkgfHwgdW5kZWZpbmVkO1xuICAgICAgICBpbmZvYm94LnN0YXRlLnZhcmlhYmxlID0gKHN0YXRlICYmIHN0YXRlLnZhcmlhYmxlKSB8fCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICAvL3ZhciBiYm94QW5kQW5jaG9yUmVzdWx0ID0gZ2V0QXV4VW5pdENsYXNzKGluZm9ib3gpLnNldEFuY2hvclNpZGVBbmRCYm94KCk7XG5cbiAgICAgIGluZm9ib3guYmJveCA9IHNlbGYuc3RhdGVBbmRJbmZvQmJveFByb3AoZ2x5cGgsIHBhcmVudEJib3gpO1xuICAgICAgaW5mb2JveC5zdHlsZSA9IHNlbGYuZ2V0RGVmYXVsdFN0YXRlQW5kSW5mb1N0eWxlKGdseXBoLCBwYXJlbnQuY2xhc3MpO1xuICAgICAgLy9jbGFzc2VzLlN0YXRlVmFyaWFibGUuc2V0QW5jaG9yU2lkZShpbmZvYm94KTtcbiAgICAgIHN0YXRlQW5kSW5mb0FycmF5LnB1c2goaW5mb2JveCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlQW5kSW5mb0FycmF5O1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5nZXREZWZhdWx0U3RhdGVBbmRJbmZvU3R5bGUgPSBmdW5jdGlvbihneWxwaCwgcGFyZW50Q2xhc3MpIHtcbiAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0SW5mb2JveFN0eWxlKCBwYXJlbnRDbGFzcywgZ3lscGguY2xhc3NfICk7XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmFkZFBhcmVudEluZm9Ub05vZGUgPSBmdW5jdGlvbiAoZWxlLCBub2RlT2JqLCBwYXJlbnQsIGNvbXBhcnRtZW50cykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY29tcGFydG1lbnRSZWYgPSBlbGUuY29tcGFydG1lbnRSZWY7XG5cbiAgICB2YXIgaW5mZXJOZXN0aW5nT25Mb2FkID0gb3B0aW9ucy5pbmZlck5lc3RpbmdPbkxvYWQ7XG4gICAgaW5mZXJOZXN0aW5nT25Mb2FkID0gdHlwZW9mIGluZmVyTmVzdGluZ09uTG9hZCA9PT0gJ2Z1bmN0aW9uJyA/IGluZmVyTmVzdGluZ09uTG9hZC5jYWxsKCkgOiBpbmZlck5lc3RpbmdPbkxvYWQ7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBub2RlT2JqLnBhcmVudCA9IHBhcmVudDtcbiAgICB9IGVsc2UgaWYgKGNvbXBhcnRtZW50UmVmKSB7XG4gICAgICBub2RlT2JqLnBhcmVudCA9IGNvbXBhcnRtZW50UmVmO1xuICAgIH0gZWxzZSBpZihpbmZlck5lc3RpbmdPbkxvYWQpIHtcbiAgICAgIG5vZGVPYmoucGFyZW50ID0gJyc7XG5cbiAgICAgIC8vIGFkZCBjb21wYXJ0bWVudCBhY2NvcmRpbmcgdG8gZ2VvbWV0cnlcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcGFydG1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBiYm94ID0ge1xuICAgICAgICAgICd4JzogcGFyc2VGbG9hdChlbGUuYmJveC54KSxcbiAgICAgICAgICAneSc6IHBhcnNlRmxvYXQoZWxlLmJib3gueSksXG4gICAgICAgICAgJ3cnOiBwYXJzZUZsb2F0KGVsZS5iYm94LncpLFxuICAgICAgICAgICdoJzogcGFyc2VGbG9hdChlbGUuYmJveC5oKSxcbiAgICAgICAgICAnaWQnOiBlbGUuaWRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNlbGYuaXNJbkJvdW5kaW5nQm94KGJib3gsIGNvbXBhcnRtZW50c1tpXSkpIHtcbiAgICAgICAgICBub2RlT2JqLnBhcmVudCA9IGNvbXBhcnRtZW50c1tpXS5pZDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzYmdubWxUb0pzb24uYWRkQ3l0b3NjYXBlSnNOb2RlID0gZnVuY3Rpb24gKGVsZSwganNvbkFycmF5LCBwYXJlbnQsIGNvbXBhcnRtZW50cykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgbm9kZU9iaiA9IHt9O1xuICAgIHZhciBzdHlsZU9iaiA9IHt9O1xuXG4gICAgLy8gYWRkIGlkIGluZm9ybWF0aW9uXG4gICAgbm9kZU9iai5pZCA9IGVsZS5pZDtcbiAgICAvLyBhZGQgbm9kZSBib3VuZGluZyBib3ggaW5mb3JtYXRpb25cbiAgICBub2RlT2JqLmJib3ggPSBzZWxmLmJib3hQcm9wKGVsZSk7ICAgIFxuXG4gICAgaWYgKGVsZS5taW5XaWR0aCkge1xuICAgICAgbm9kZU9iai5taW5XaWR0aCA9IGVsZS5taW5XaWR0aDtcbiAgICAgIG5vZGVPYmoubWluV2lkdGhCaWFzTGVmdCA9IGVsZS5taW5XaWR0aEJpYXNMZWZ0O1xuICAgICAgbm9kZU9iai5taW5XaWR0aEJpYXNSaWdodCA9IGVsZS5taW5XaWR0aEJpYXNSaWdodDtcbiAgICB9XG5cbiAgICBpZiAoZWxlLm1pbkhlaWdodCkge1xuICAgICAgbm9kZU9iai5taW5IZWlnaHQgPSBlbGUubWluSGVpZ2h0O1xuICAgICAgbm9kZU9iai5taW5IZWlnaHRCaWFzVG9wID0gZWxlLm1pbkhlaWdodEJpYXNUb3A7XG4gICAgICBub2RlT2JqLm1pbkhlaWdodEJpYXNCb3R0b20gPSBlbGUubWluSGVpZ2h0Qmlhc0JvdHRvbTtcbiAgICB9XG4gICAgaWYoZWxlLm9yaWdpbmFsVyl7XG4gICAgICBub2RlT2JqLm9yaWdpbmFsVyA9IGVsZS5vcmlnaW5hbFc7XG4gICAgfVxuICAgIGlmKGVsZS5vcmlnaW5hbEgpe1xuICAgICAgbm9kZU9iai5vcmlnaW5hbEggPSBlbGUub3JpZ2luYWxIO1xuICAgIH1cblxuICAgIGlmKGVsZS5jb21wbGV4Q2FsY3VsYXRlZFBhZGRpbmcpe1xuICAgICAgbm9kZU9iai5jb21wbGV4Q2FsY3VsYXRlZFBhZGRpbmcgPSBlbGUuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nO1xuICAgIH1cblxuICAgIC8vIGFkZCBjbGFzcyBpbmZvcm1hdGlvblxuICAgIG5vZGVPYmouY2xhc3MgPSBlbGUuY2xhc3NfO1xuICAgIC8vIGFkZCBsYWJlbCBpbmZvcm1hdGlvblxuICAgIG5vZGVPYmoubGFiZWwgPSAoZWxlLmxhYmVsICYmIGVsZS5sYWJlbC50ZXh0KSB8fCB1bmRlZmluZWQ7XG4gICAgaWYobm9kZU9iai5sYWJlbCAhPSB1bmRlZmluZWQpe1xuICAgICAgbm9kZU9iai5sYWJlbCA9IFwiXCIrIG5vZGVPYmoubGFiZWw7XG4gICAgfVxuICAgIC8vIGFkZCBzdGF0ZSBhbmQgaW5mbyBib3ggaW5mb3JtYXRpb25cbiAgICBub2RlT2JqLnN0YXRlc2FuZGluZm9zID0gc2VsZi5zdGF0ZUFuZEluZm9Qcm9wKGVsZSwgbm9kZU9iaik7XG4gICAgLy8gYWRkaW5nIHBhcmVudCBpbmZvcm1hdGlvblxuICAgIHNlbGYuYWRkUGFyZW50SW5mb1RvTm9kZShlbGUsIG5vZGVPYmosIHBhcmVudCwgY29tcGFydG1lbnRzKTtcblxuXG4gICAgLy8gYWRkIGxhbmd1YWdlIGluZm8sIHRoaXMgd2lsbCBhbHdheXMgYmUgdGhlIG1hcFR5cGUgaWYgbm90IGh5YnJpZFxuICAgIHZhciBtYXBUeXBlID0gZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlO1xuICAgIGlmKG1hcFR5cGUgPT0gJ1BEJyB8fCBtYXBUeXBlID09ICdBRicgfHwgbWFwVHlwZSA9PSAnU0lGJyl7XG4gICAgICBub2RlT2JqLmxhbmd1YWdlID0gZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlO1xuICAgIH1lbHNlIGlmKG1hcFR5cGUgPT0gJ0h5YnJpZFNiZ24nKXtcbiAgICAgIGlmKG5vZGVPYmouY2xhc3MgPT0gJ2RlbGF5JyB8fCBub2RlT2JqLmNsYXNzLnN0YXJ0c1dpdGgoXCJCQVwiKSl7XG4gICAgICAgIG5vZGVPYmoubGFuZ3VhZ2UgPSAnQUYnO1xuICAgICAgfWVsc2V7XG4gICAgICAgIG5vZGVPYmoubGFuZ3VhZ2UgPSAnUEQnO1xuICAgICAgfVxuICAgIH1lbHNley8vbWFwdHlwZSA9PSBIeWJyaWRBbnlcbiAgICAgIGlmKG5vZGVPYmouY2xhc3Muc3RhcnRzV2l0aChcIlNJRlwiKSl7XG4gICAgICAgIG5vZGVPYmoubGFuZ3VhZ2UgPSAnU0lGJztcbiAgICAgIH1lbHNlIGlmKG5vZGVPYmouY2xhc3MgPT0gJ2RlbGF5JyB8fCBub2RlT2JqLmNsYXNzLnN0YXJ0c1dpdGgoXCJCQVwiKSl7XG4gICAgICAgIG5vZGVPYmoubGFuZ3VhZ2UgPSAnQUYnO1xuICAgICAgfWVsc2V7XG4gICAgICAgIG5vZGVPYmoubGFuZ3VhZ2UgPSAnUEQnO1xuICAgICAgfVxuICAgIH1cbiAgIFxuICAgIC8vIGFkZCBkZWZhdWx0IHByb3BlcnRpZXMgb2YgdGhlIG5vZGUgdHlwZSB0byBlbGVtZW50IGRhdGFcbiAgICAvLyB0aGVzZSBwcm9wcyB3b3VsZCBiZSBvdmVycmlkZW4gYnkgc3R5bGUgcHJvcGVydGllcyBvZiBlbGVtZW50XG4gICAgLy8gc3RvcmVkIGluIHRoZSBmaWxlXG4gICAgZWxlbWVudFV0aWxpdGllcy5leHRlbmROb2RlRGF0YVdpdGhDbGFzc0RlZmF1bHRzKCBub2RlT2JqLCBub2RlT2JqLmNsYXNzICk7XG5cbiAgICAvLyBhZGQgY2xvbmUgaW5mb3JtYXRpb25cbiAgICBpZiAoZWxlLmNsb25lKSB7XG4gICAgICBub2RlT2JqLmNsb25lbWFya2VyID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZU9iai5jbG9uZW1hcmtlciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBhZGQgcG9ydCBpbmZvcm1hdGlvblxuICAgIHZhciBwb3J0cyA9IFtdO1xuICAgIHZhciBwb3J0RWxlbWVudHMgPSBlbGUucG9ydHM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvcnRFbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBvcnRFbCA9IHBvcnRFbGVtZW50c1tpXTtcbiAgICAgIHZhciBpZCA9IHBvcnRFbC5pZDtcbiAgICAgIHZhciByZWxhdGl2ZVhQb3MgPSBwYXJzZUZsb2F0KHBvcnRFbC54KSAtIG5vZGVPYmouYmJveC54O1xuICAgICAgdmFyIHJlbGF0aXZlWVBvcyA9IHBhcnNlRmxvYXQocG9ydEVsLnkpIC0gbm9kZU9iai5iYm94Lnk7XG5cbiAgICAgIHJlbGF0aXZlWFBvcyA9IHJlbGF0aXZlWFBvcyAvIHBhcnNlRmxvYXQobm9kZU9iai5iYm94LncpICogMTAwO1xuICAgICAgcmVsYXRpdmVZUG9zID0gcmVsYXRpdmVZUG9zIC8gcGFyc2VGbG9hdChub2RlT2JqLmJib3guaCkgKiAxMDA7XG4gICAgICBcbiAgICAgIC8vIEluIGNhc2UgcG9ydCBwb3NpdGlvbiBpcyBub3QgdmVydGljYWxseS9ob3Jpem9udGFsbHkgYWxpZ25lZCB3aXRoIHRoZSBub2RlIGNlbnRlciwgZGVjaWRlIGEgZGlyZWN0aW9uXG4gICAgICBpZihNYXRoLmFicyhyZWxhdGl2ZVhQb3MpID4gMCAmJiBNYXRoLmFicyhyZWxhdGl2ZVlQb3MpID4gMCkge1xuICAgICAgICBpZihNYXRoLmFicyhyZWxhdGl2ZVhQb3MpID49IE1hdGguYWJzKHJlbGF0aXZlWVBvcykpXG4gICAgICAgICAgcmVsYXRpdmVZUG9zID0gMDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJlbGF0aXZlWFBvcyA9IDA7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHBvcnRzIGFyZSBub3QgaW5zaWRlIHRoZSBub2RlIHNoYXBlLlxuICAgICAgLy8gVGhlcmVmb3JlLCBhYnMuIHZhbHVlIG9mIHRoZWlyIHJlbGF0aXZlIHggYW5kIHkgY29vcmRpbmF0ZXMgKHJlbGF0aXZlIHRvIG5vZGUgY2VudGVyKSBzaG91bGQgYmUgYmlnZ2VyIHRoYW4gNTAuXG4gICAgICBpZiAoTWF0aC5hYnMocmVsYXRpdmVYUG9zKSA8IDUwKSB7XG4gICAgICAgIHJlbGF0aXZlWFBvcyA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicyhyZWxhdGl2ZVlQb3MpIDwgNTApIHtcbiAgICAgICAgcmVsYXRpdmVZUG9zID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlbGF0aXZlWFBvcyA9PT0gMCAmJiByZWxhdGl2ZVlQb3MgPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIElmIHBvcnQgbGVuZ3RoIGlzIGxvbmdlciB0aGFuIHRoZSBub2RlIHNpemUgKGZvciBleGFtcGxlLCBzb21lIHNiZ24gZmlsZXMgZ2VuZXJhdGVkIGZyb20gUmVhY3RvbWUgZGF0YWJhc2UgaGFzIHZlcnkgbG9uZyBwb3J0cyksXG4gICAgICAvLyBzZXQgdGhlIHBvcnQgbGVuZ3RoIHRvIDcwIHdoaWNoIGlzIGRlZmF1bHQgaW4gc2JnbnZpelxuICAgICAgaWYoTWF0aC5hYnMocmVsYXRpdmVYUG9zKSA+IDE1MCB8fCBNYXRoLmFicyhyZWxhdGl2ZVlQb3MpID4gMTUwKSB7XG4gICAgICAgIGlmKE1hdGguYWJzKHJlbGF0aXZlWFBvcykgPiAxNTApXG4gICAgICAgICAgcmVsYXRpdmVYUG9zID0gcmVsYXRpdmVYUG9zIC8gTWF0aC5hYnMocmVsYXRpdmVYUG9zKSAqIDcwO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVsYXRpdmVZUG9zID0gcmVsYXRpdmVZUG9zIC8gTWF0aC5hYnMocmVsYXRpdmVZUG9zKSAqIDcwO1xuICAgICAgfSAgICAgIFxuXG4gICAgICBwb3J0cy5wdXNoKHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICB4OiByZWxhdGl2ZVhQb3MsXG4gICAgICAgIHk6IHJlbGF0aXZlWVBvc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbm9kZU9iai5wb3J0cyA9IHBvcnRzO1xuXG4gICAgdmFyIF9jbGFzcyA9IG5vZGVPYmouY2xhc3M7XG4gICAgLy8gSWYgdGhlIG5vZGUgY2FuIGhhdmUgcG9ydHMgYW5kIGl0IGhhcyBleGFjdGx5IDIgcG9ydHMgdGhlbiBpdCBzaG91bGQgYmUgcmVwcmVzZW50ZWQgYnkgYSBiaWdnZXIgYmJveC5cbiAgICAvLyBUaGlzIGlzIGJlY2F1c2Ugd2UgcmVwcmVzZW50IGl0IGFzIGEgcG9seWdvbiBhbmQgc28gdGhlIHdob2xlIHNoYXBlIGluY2x1ZGluZyB0aGUgcG9ydHMgYXJlIHJlbmRlcmVkIGluIHRoZSBub2RlIGJib3guXG4gICAgaWYgKGVsZW1lbnRVdGlsaXRpZXMuY2FuSGF2ZVBvcnRzKF9jbGFzcykpIHtcbiAgICAgIGlmIChncmFwaFV0aWxpdGllcy5wb3J0c0VuYWJsZWQgJiYgcG9ydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBwb3J0cyBhcmUgc3ltbWV0cmljIHRvIHRoZSBub2RlIGNlbnRlciBzbyB1c2luZyBqdXN0IG9uZSBvZiB0aGUgcG9ydHMgaXMgZW5vdWdoXG4gICAgICAgIHZhciBwb3J0ID0gcG9ydHNbMF07XG4gICAgICAgIHZhciBvcmllbnRhdGlvbiA9IHBvcnQueCA9PT0gMCA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJhdGlvIG9mIHRoZSBhcmVhIG9jY3VwaWVkIHdpdGggcG9ydHMgb3ZlciB3aXRob3V0IHBvcnRzXG4gICAgICAgIHZhciByYXRpbyA9IG9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gTWF0aC5hYnMocG9ydC55KSAvIDUwIDogTWF0aC5hYnMocG9ydC54KSAvIDUwO1xuICAgICAgICAvLyBNdWx0aXBseSB0aGUgYmJveCB3aXRoIHRoZSBjYWxjdWxhdGVkIHJhdGlvXG4gICAgICAgIG5vZGVPYmouYmJveC53ID0gcGFyc2VGbG9hdChub2RlT2JqLmJib3gudykgKiByYXRpbztcbiAgICAgICAgbm9kZU9iai5iYm94LmggPSBwYXJzZUZsb2F0KG5vZGVPYmouYmJveC5oKSAqIHJhdGlvO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGUuZXh0ZW5zaW9uICYmIGVsZS5leHRlbnNpb24uaGFzKCdhbm5vdGF0aW9uJykpIHsgLy8gYW5ub3RhdGlvbiBleHRlbnNpb24gd2FzIGZvdW5kXG4gICAgICB2YXIgcmRmRWxlbWVudCA9IGVsZS5leHRlbnNpb24uZ2V0KCdhbm5vdGF0aW9uJykucmRmRWxlbWVudDtcbiAgICAgIG5vZGVPYmogPSBzZWxmLmhhbmRsZUFubm90YXRpb25zKG5vZGVPYmosIHJkZkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChlbGUuZXh0ZW5zaW9uICYmIGVsZS5leHRlbnNpb24uaGFzKFwic2JnbnZpelwiKSl7XG4gICAgICBwYXJzZVN0cmluZyhlbGUuZXh0ZW5zaW9uLmdldChcInNiZ252aXpcIiksIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnNiZ252aXouaGlkZGVuKXtcbiAgICAgICAgICBzdHlsZU9iai5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5zYmdudml6Lmhhc0hpZGRlbk5laWdoYm91cil7XG4gICAgICAgICAgbm9kZU9iai50aGlja0JvcmRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5zYmdudml6LmNvbGxhcHNlZCl7XG4gICAgICAgICAgbm9kZU9iai5wb3NpdGlvbkJlZm9yZVNhdmluZyA9IHt4IDogTnVtYmVyKHJlc3VsdC5zYmdudml6LnBvc2l0aW9uQmVmb3JlU2F2aW5nWzBdLiQueCksXG4gICAgICAgICAgICAgIHk6IE51bWJlcihyZXN1bHQuc2JnbnZpei5wb3NpdGlvbkJlZm9yZVNhdmluZ1swXS4kLnkpfTtcbiAgICAgICAgICBub2RlT2JqLmNvbGxhcHNlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIGN5dG9zY2FwZUpzTm9kZSA9IHtkYXRhOiBub2RlT2JqLCBzdHlsZTogc3R5bGVPYmp9O1xuICAgIGpzb25BcnJheS5wdXNoKGN5dG9zY2FwZUpzTm9kZSk7XG4gIH07XG5cbiAgLyoqXG4gICogZ2l2ZW4gYSBmdXR1cmUgY3kgb2JqZWN0LCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCdzIGxpYnNiZ25qcycgZXh0ZW5zaW9uLCBwb3B1bGF0ZXMgdGhlIGFubm90YXRpb25zIGZpZWxkXG4gICovXG4gIHNiZ25tbFRvSnNvbi5oYW5kbGVBbm5vdGF0aW9ucyA9IGZ1bmN0aW9uKGN5T2JqZWN0LCByZGZFbGVtZW50KSB7XG4gICAgLy8gbG9jYWwgdXRpbGl0eSBmdW5jdGlvblxuICAgIGZ1bmN0aW9uIGRiRnJvbVVybCh1cmwpIHtcbiAgICAgIHZhciByZWdleHAgPSAvXmh0dHA6XFwvXFwvaWRlbnRpZmllcnMub3JnXFwvKC4rPylcXC8uKyQvO1xuICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKHJlZ2V4cCwgJyQxJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsbEVsZW1lbnREYXRhQW5ub3RhdGlvbihjeU9iamVjdCwgYW5ub3RhdGlvbkluZGV4LCBzdGF0dXMsIHNlbGVjdGVkREIsIHNlbGVjdGVkUmVsYXRpb24sIGFubm90YXRpb25WYWx1ZSkge1xuICAgICAgaWYoIWN5T2JqZWN0LmFubm90YXRpb25zKSB7XG4gICAgICAgIGN5T2JqZWN0LmFubm90YXRpb25zID0ge307XG4gICAgICB9XG4gICAgICB2YXIgYW5ub3RJZCA9IGN5T2JqZWN0LmlkK1wiLWFubm90LVwiK2Fubm90YXRpb25JbmRleDtcblxuICAgICAgY3lPYmplY3QuYW5ub3RhdGlvbnNbYW5ub3RJZF0gPSB7XG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgbWF5IGJlIGhhemFyZG91cy4gQnV0IHNldHRpbmcgaXQgYXMgdW5jaGVja2VkIGxlYXZlIHRoZSBhbm5vdGF0aW9uIG91dCBpZiB0aGUgZmlsZSBpcyBzYXZlZC5cbiAgICAgICAgLy8gVGhpcyB3b3VsZCBsZWFkIHRvIHRoZSB1c2VyIGxvc2luZyBhbm5vdGF0aW9ucyB3aXRob3V0IGtub3dpbmcgaXQuXG4gICAgICAgIHN0YXR1czogc3RhdHVzLCAvLyA8LS0gd2UgdHJ1c3QgdGhhdCB3aGF0J3MgYmVlbiBsb2FkZWQgaXMgdmFsaWQuXG4gICAgICAgIHNlbGVjdGVkREI6IHNlbGVjdGVkREIsXG4gICAgICAgIHNlbGVjdGVkUmVsYXRpb246IHNlbGVjdGVkUmVsYXRpb24sXG4gICAgICAgIGFubm90YXRpb25WYWx1ZTogYW5ub3RhdGlvblZhbHVlXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGN5T2JqZWN0O1xuICAgIH1cblxuICAgIC8vIHdlIGFzc3VtZSB0aGF0IHRoZSBpZCBvZiB0aGUgcmRmOmFib3V0IGZpZWxkIGlzIHRoZSBvbmUgb2YgdGhlIGN1cnJlbnQgbm9kZSwgYW5kIHRoYXQgdGhlcmUncyBvbmx5IDEgZGVzY3JpcHRpb25cbiAgICB2YXIgaWQgPSByZGZFbGVtZW50LmdldEFsbElkcygpWzBdO1xuICAgIHZhciByZXNvdXJjZXMgPSByZGZFbGVtZW50LmdldFJlc291cmNlc09mSWQoaWQpO1xuICAgIHZhciBjdXN0b21Qcm9wZXJ0aWVzID0gcmRmRWxlbWVudC5nZXRDdXN0b21Qcm9wZXJ0aWVzT2ZJZChpZCk7XG5cbiAgICB2YXIgZ2xvYmFsQW5ub3RJbmRleCA9IDA7XG4gICAgLy8gaGFuZGxlIGNvbnRyb2xsZWQgcHJvcGVydGllc1xuICAgIGZvciAodmFyIGZ1bGxRdWFsaWZpZXIgaW4gcmVzb3VyY2VzKSB7XG4gICAgICB2YXIgcmVsYXRpb24gPSBsaWJzYmduanMuYW5ub3QuVXRpbC5yZWR1Y2VQcmVmaXgoZnVsbFF1YWxpZmllcik7XG4gICAgICBmb3IodmFyIGk9MDsgaTxyZXNvdXJjZXNbZnVsbFF1YWxpZmllcl0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzb3VyY2VzW2Z1bGxRdWFsaWZpZXJdW2ldO1xuICAgICAgICB2YXIgc2VsZWN0ZWREQiA9IGRiRnJvbVVybCh2YWx1ZSk7XG4gICAgICAgIGN5T2JqZWN0ID0gZmlsbEVsZW1lbnREYXRhQW5ub3RhdGlvbihjeU9iamVjdCwgZ2xvYmFsQW5ub3RJbmRleCwgXCJ2YWxpZGF0ZWRcIiwgc2VsZWN0ZWREQiwgcmVsYXRpb24sIHZhbHVlKTtcbiAgICAgICAgZ2xvYmFsQW5ub3RJbmRleCsrO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBoYW5kbGUgY3VzdG9tIHByb3BlcnRpZXNcbiAgICBmb3IgKHZhciBrZXkgaW4gY3VzdG9tUHJvcGVydGllcykge1xuICAgICAgdmFyIHZhbHVlID0gY3VzdG9tUHJvcGVydGllc1trZXldO1xuICAgICAgY3lPYmplY3QgPSBmaWxsRWxlbWVudERhdGFBbm5vdGF0aW9uKGN5T2JqZWN0LCBnbG9iYWxBbm5vdEluZGV4LCBcInZhbGlkYXRlZFwiLCBrZXksIFwic2lvOlNJT18wMDAyMjNcIiwgdmFsdWUpO1xuICAgICAgZ2xvYmFsQW5ub3RJbmRleCsrO1xuICAgIH1cblxuICAgIHJldHVybiBjeU9iamVjdDtcbiAgfTtcblxuICBzYmdubWxUb0pzb24udHJhdmVyc2VOb2RlcyA9IGZ1bmN0aW9uIChlbGUsIGpzb25BcnJheSwgcGFyZW50LCBjb21wYXJ0bWVudHMpIHtcbiAgICB2YXIgZWxJZCA9IGVsZS5pZDsgXG4gICAgaWYgKCFoYW5kbGVkRWxlbWVudHNbZWxlLmNsYXNzX10pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnNlcnRlZE5vZGVzW2VsSWRdID0gdHJ1ZTtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgLy8gYWRkIGNvbXBsZXggbm9kZXMgaGVyZVxuXG4gICAgdmFyIGVsZUNsYXNzID0gZWxlLmNsYXNzXztcblxuICAgIGlmIChlbGVDbGFzcyA9PT0gJ2NvbXBsZXgnIHx8IGVsZUNsYXNzID09PSAnY29tcGxleCBtdWx0aW1lcicgfHwgZWxlQ2xhc3MgPT09ICdzdWJtYXAnIHx8IGVsZUNsYXNzID09PSAndG9wb2xvZ3kgZ3JvdXAnKSB7XG4gICAgICBzZWxmLmFkZEN5dG9zY2FwZUpzTm9kZShlbGUsIGpzb25BcnJheSwgcGFyZW50LCBjb21wYXJ0bWVudHMpO1xuXG4gICAgICB2YXIgY2hpbGRHbHlwaHMgPSBlbGUuZ2x5cGhNZW1iZXJzO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZEdseXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZ2x5cGggPSBjaGlsZEdseXBoc1tpXTtcbiAgICAgICAgdmFyIGdseXBoQ2xhc3MgPSBnbHlwaC5jbGFzc187XG4gICAgICAgIGlmIChnbHlwaENsYXNzICE9PSAnc3RhdGUgdmFyaWFibGUnICYmIGdseXBoQ2xhc3MgIT09ICd1bml0IG9mIGluZm9ybWF0aW9uJykge1xuICAgICAgICAgIGlmIChnbHlwaC5jb21wYXJ0bWVudFJlZiAmJiBnbHlwaC5jb21wYXJ0bWVudFJlZiAhPSBlbElkICYmIGVsZUNsYXNzID09ICdzdWJtYXAnKSB7XG4gICAgICAgICAgICBzZWxmLnRyYXZlcnNlTm9kZXMoZ2x5cGgsIGpzb25BcnJheSwgZ2x5cGguY29tcGFydG1lbnRSZWYsIGNvbXBhcnRtZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VsZi50cmF2ZXJzZU5vZGVzKGdseXBoLCBqc29uQXJyYXksIGVsSWQsIGNvbXBhcnRtZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYuYWRkQ3l0b3NjYXBlSnNOb2RlKGVsZSwganNvbkFycmF5LCBwYXJlbnQsIGNvbXBhcnRtZW50cyk7XG4gICAgfVxuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5nZXRQb3J0cyA9IGZ1bmN0aW9uICh4bWxPYmplY3QpIHtcbiAgICByZXR1cm4gKCB4bWxPYmplY3QuX2NhY2hlZFBvcnRzID0geG1sT2JqZWN0Ll9jYWNoZWRQb3J0cyB8fCB4bWxPYmplY3QucXVlcnlTZWxlY3RvckFsbCgncG9ydCcpKTtcbiAgfTtcblxuICBzYmdubWxUb0pzb24uZ2V0R2x5cGhzID0gZnVuY3Rpb24gKHhtbE9iamVjdCkge1xuICAgIHZhciBnbHlwaHMgPSB4bWxPYmplY3QuX2NhY2hlZEdseXBocztcblxuICAgIGlmICghZ2x5cGhzKSB7XG4gICAgICBnbHlwaHMgPSB4bWxPYmplY3QuX2NhY2hlZEdseXBocyA9IHhtbE9iamVjdC5fY2FjaGVkR2x5cGhzIHx8IHhtbE9iamVjdC5xdWVyeVNlbGVjdG9yQWxsKCdnbHlwaCcpO1xuXG4gICAgICB2YXIgaWQyZ2x5cGggPSB4bWxPYmplY3QuX2lkMmdseXBoID0ge307XG5cbiAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGdseXBocy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgdmFyIGcgPSBnbHlwaHNbaV07XG4gICAgICAgIHZhciBpZCA9IGcuZ2V0QXR0cmlidXRlKCdpZCcpO1xuXG4gICAgICAgIGlkMmdseXBoWyBpZCBdID0gZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ2x5cGhzO1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5nZXRBcmNzID0gZnVuY3Rpb24gKHhtbE9iamVjdCkge1xuICAgIHZhciBhcmNzID0geG1sT2JqZWN0Ll9jYWNoZWRBcmNzO1xuXG4gICAgaWYgKCFhcmNzKSB7XG4gICAgICBhcmNzID0geG1sT2JqZWN0Ll9jYWNoZWRBcmNzID0geG1sT2JqZWN0Ll9jYWNoZWRBcmNzIHx8IHhtbE9iamVjdC5xdWVyeVNlbGVjdG9yQWxsKCdhcmMnKTtcblxuICAgICAgdmFyIGlkMmFyYyA9IHhtbE9iamVjdC5faWQyYXJjID0ge307XG5cbiAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGFyY3MubGVuZ3RoOyBpKysgKSB7XG4gICAgICAgIHZhciBhcmMgPSBhcmNzW2ldO1xuICAgICAgICB2YXIgaWQgPSBhcmMuZ2V0QXR0cmlidXRlKCdpZCcpO1xuXG4gICAgICAgIGlkMmFyY1sgaWQgXSA9IGFyYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJjcztcbiAgfTtcblxuICBzYmdubWxUb0pzb24uZ2V0R2x5cGhCeUlkID0gZnVuY3Rpb24gKHhtbE9iamVjdCwgaWQpIHtcbiAgICB0aGlzLmdldEdseXBocyh4bWxPYmplY3QpOyAvLyBtYWtlIHN1cmUgY2FjaGUgaXMgYnVpbHRcblxuICAgIHJldHVybiB4bWxPYmplY3QuX2lkMmdseXBoW2lkXTtcbiAgfTtcblxuICBzYmdubWxUb0pzb24uZ2V0QXJjQnlJZCA9IGZ1bmN0aW9uICh4bWxPYmplY3QsIGlkKSB7XG4gICAgdGhpcy5nZXRBcmNzKHhtbE9iamVjdCk7IC8vIG1ha2Ugc3VyZSBjYWNoZSBpcyBidWlsdFxuXG4gICAgcmV0dXJuIHhtbE9iamVjdC5faWQyYXJjW2lkXTtcbiAgfTtcblxuICBzYmdubWxUb0pzb24uZ2V0QXJjU291cmNlQW5kVGFyZ2V0ID0gZnVuY3Rpb24gKGFyYywgeG1sT2JqZWN0KSB7XG4gICAgLy8gc291cmNlIGFuZCB0YXJnZXQgY2FuIGJlIGluc2lkZSBvZiBhIHBvcnRcbiAgICB2YXIgc291cmNlID0gYXJjLnNvdXJjZTtcbiAgICB2YXIgdGFyZ2V0ID0gYXJjLnRhcmdldDtcbiAgICB2YXIgc291cmNlTm9kZUlkO1xuICAgIHZhciB0YXJnZXROb2RlSWQ7XG5cbiAgICB2YXIgc291cmNlRXhpc3RzID0gdGhpcy5nZXRHbHlwaEJ5SWQoeG1sT2JqZWN0LCBzb3VyY2UpO1xuICAgIHZhciB0YXJnZXRFeGlzdHMgPSB0aGlzLmdldEdseXBoQnlJZCh4bWxPYmplY3QsIHRhcmdldCk7XG5cbiAgICBpZiAoc291cmNlRXhpc3RzKSB7XG4gICAgICBzb3VyY2VOb2RlSWQgPSBzb3VyY2U7XG4gICAgfVxuXG4gICAgaWYgKHRhcmdldEV4aXN0cykge1xuICAgICAgdGFyZ2V0Tm9kZUlkID0gdGFyZ2V0O1xuICAgIH1cblxuXG4gICAgdmFyIGk7XG4gICAgdmFyIHBvcnRFbHMgPSB0aGlzLmdldFBvcnRzKHhtbE9iamVjdCk7XG4gICAgdmFyIHBvcnQ7XG4gICAgaWYgKHNvdXJjZU5vZGVJZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcG9ydEVscy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgcG9ydCA9IHBvcnRFbHNbaV07XG4gICAgICAgIGlmIChwb3J0LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gc291cmNlKSB7XG4gICAgICAgICAgc291cmNlTm9kZUlkID0gcG9ydC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0YXJnZXROb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHBvcnRFbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcG9ydCA9IHBvcnRFbHNbaV07XG4gICAgICAgIGlmIChwb3J0LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgdGFyZ2V0Tm9kZUlkID0gcG9ydC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7J3NvdXJjZSc6IHNvdXJjZU5vZGVJZCwgJ3RhcmdldCc6IHRhcmdldE5vZGVJZH07XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmdldEFyY0FuY2hvclBvaW50UG9zaXRpb25zID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBhbmNob3JQb2ludFBvc2l0aW9ucyA9IFtdO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gZWxlLm5leHRzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHBvc1ggPSBjaGlsZHJlbltpXS54O1xuICAgICAgdmFyIHBvc1kgPSBjaGlsZHJlbltpXS55O1xuXG4gICAgICBhbmNob3JQb2ludFBvc2l0aW9ucy5wdXNoKHtcbiAgICAgICAgeDogcG9zWCxcbiAgICAgICAgeTogcG9zWVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuY2hvclBvaW50UG9zaXRpb25zO1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5hZGRDeXRvc2NhcGVKc0VkZ2UgPSBmdW5jdGlvbiAoZWxlLCBqc29uQXJyYXksIHhtbE9iamVjdCkge1xuICAgIGlmICghaGFuZGxlZEVsZW1lbnRzW2VsZS5jbGFzc19dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBzb3VyY2VBbmRUYXJnZXQgPSBzZWxmLmdldEFyY1NvdXJjZUFuZFRhcmdldChlbGUsIHhtbE9iamVjdCk7XG5cbiAgICBpZiAoIXRoaXMuaW5zZXJ0ZWROb2Rlc1tzb3VyY2VBbmRUYXJnZXQuc291cmNlXSB8fCAhdGhpcy5pbnNlcnRlZE5vZGVzW3NvdXJjZUFuZFRhcmdldC50YXJnZXRdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVkZ2VPYmogPSB7fTtcbiAgICB2YXIgc3R5bGVPYmogPSB7fTtcbiAgICB2YXIgYW5jaG9yUG9pbnRQb3NpdGlvbnMgPSBbXTtcbiAgICBpZiAoc291cmNlQW5kVGFyZ2V0LnNvdXJjZSAhPT0gc291cmNlQW5kVGFyZ2V0LnRhcmdldCkge1xuICAgICAgYW5jaG9yUG9pbnRQb3NpdGlvbnMgPSBzZWxmLmdldEFyY0FuY2hvclBvaW50UG9zaXRpb25zKGVsZSk7XG4gICAgfVxuXG4gICAgZWRnZU9iai5pZCA9IGVsZS5pZCB8fCB1bmRlZmluZWQ7XG4gICAgZWRnZU9iai5jbGFzcyA9IGVsZS5jbGFzc187XG5cbiAgICAvLyBiZXppZXIgZWRnZSBpcyB0aGUgZGVmYXVsdCBlZGdlIHN0eWxlXG4gICAgLy8gY2hhbmdlIGlmIHRoZSBmaWxlIGJlaW5nIGxvYWRlZCBoYXMgY3VydmVTdHlsZSBmaWVsZFxuICAgIHZhciBjdXJ2ZVN0eWxlID0gXCJiZXppZXJcIjtcbiAgICBpZiAoZWxlLmV4dGVuc2lvbiAmJiBlbGUuZXh0ZW5zaW9uLmhhcyhcImN1cnZlU3R5bGVcIikpIHtcbiAgICAgIHBhcnNlU3RyaW5nKGVsZS5leHRlbnNpb24uZ2V0KFwiY3VydmVTdHlsZVwiKSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgIGN1cnZlU3R5bGUgPSByZXN1bHQuY3VydmVTdHlsZTtcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChjdXJ2ZVN0eWxlID09IFwidW5idW5kbGVkLWJlemllclwiKSB7XG4gICAgICBlZGdlT2JqLmNvbnRyb2xQb2ludFBvc2l0aW9ucyA9IGFuY2hvclBvaW50UG9zaXRpb25zO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVkZ2VPYmouYmVuZFBvaW50UG9zaXRpb25zID0gYW5jaG9yUG9pbnRQb3NpdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIGlzU2lmTWV0YUVkZ2U7XG4gICAgaWYgKGVsZS5leHRlbnNpb24gJiYgZWxlLmV4dGVuc2lvbi5oYXMoXCJzaWZNZXRhRWRnZVwiKSkge1xuICAgICAgcGFyc2VTdHJpbmcoZWxlLmV4dGVuc2lvbi5nZXQoXCJzaWZNZXRhRWRnZVwiKSwgZnVuY3Rpb24gKGVyciwgcmVzdWx0KSB7XG4gICAgICAgIGlzU2lmTWV0YUVkZ2UgPSByZXN1bHQuc2lmTWV0YUVkZ2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzU2lmTWV0YUVkZ2UpIHtcbiAgICAgIGVkZ2VPYmpbXCJzaWYtbWV0YVwiXSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gYWRkIGxhbmd1YWdlIGluZm8sIHRoaXMgd2lsbCBhbHdheXMgYmUgdGhlIG1hcFR5cGUgaWYgbm90IGh5YnJpZFxuICAgIHZhciBQZEVkZ2VzID0gW1wiY29uc3VtcHRpb25cIixcInByb2R1Y3Rpb25cIixcIm1vZHVsYXRpb25cIixcInN0aW11bGF0aW9uXCIsXCJjYXRhbHlzaXNcIixcImluaGliaXRpb25cIixcIm5lY2Vzc2FyeSBzdGltdWxhdGlvblwiLFwibG9naWMgYXJjXCIsXCJlcXVpdmFsZW5jZSBhcmNcIl07XG4gICAgdmFyIEFmRWRnZXMgPSBbXCJwb3NpdGl2ZSBpbmZsdWVuY2VcIixcIm5lZ2F0aXZlIGluZmx1ZW5jZVwiLFwidW5rbm93biBpbmZsdWVuY2VcIl07ICBcbiAgICB2YXIgbWFwVHlwZSA9IGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZTtcbiAgICBpZihtYXBUeXBlID09ICdQRCcgfHwgbWFwVHlwZSA9PSAnQUYnIHx8IG1hcFR5cGUgPT0gJ1NJRicpe1xuICAgICAgZWRnZU9iai5sYW5ndWFnZSA9IGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZTtcbiAgICB9ZWxzZSBpZihtYXBUeXBlID09ICdIeWJyaWRTYmduJyl7XG4gICAgICBpZihQZEVkZ2VzLmluZGV4T2YoZWRnZU9iai5jbGFzcykgPiAtMSl7XG4gICAgICAgIGVkZ2VPYmoubGFuZ3VhZ2UgPSAnUEQnO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGVkZ2VPYmoubGFuZ3VhZ2UgPSAnQUYnO1xuICAgICAgfVxuICAgIH1lbHNley8vbWFwdHlwZSA9PSBIeWJyaWRBbnlcbiAgICAgIGlmKFBkRWRnZXMuaW5kZXhPZihlZGdlT2JqLmNsYXNzKSA+IC0xKXtcbiAgICAgICAgZWRnZU9iai5sYW5ndWFnZSA9ICdQRCc7XG4gICAgICB9ZWxzZSBpZihBZkVkZ2VzLmluZGV4T2YoZWRnZU9iai5jbGFzcykgPiAtMSl7XG4gICAgICAgIGVkZ2VPYmoubGFuZ3VhZ2UgPSAnQUYnO1xuICAgICAgfWVsc2V7XG4gICAgICAgIGVkZ2VPYmoubGFuZ3VhZ2UgPSAnU0lGJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZEVkZ2VEYXRhV2l0aENsYXNzRGVmYXVsdHMoIGVkZ2VPYmosIGVkZ2VPYmouY2xhc3MgKTtcblxuICAgIGVkZ2VPYmouY2FyZGluYWxpdHkgPSAwO1xuICAgIGlmIChlbGUuZ2x5cGhzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWxlLmdseXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZWxlLmdseXBoc1tpXS5jbGFzc18gPT09ICdjYXJkaW5hbGl0eScgfHwgZWxlLmdseXBoc1tpXS5jbGFzc18gPT09ICdzdG9pY2hpb21ldHJ5Jykge1xuICAgICAgICAgIHZhciBsYWJlbCA9IGVsZS5nbHlwaHNbaV0ubGFiZWw7XG4gICAgICAgICAgZWRnZU9iai5jYXJkaW5hbGl0eSA9IGxhYmVsLnRleHQgfHwgdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWRnZU9iai5zb3VyY2UgPSBzb3VyY2VBbmRUYXJnZXQuc291cmNlO1xuICAgIGVkZ2VPYmoudGFyZ2V0ID0gc291cmNlQW5kVGFyZ2V0LnRhcmdldDtcblxuICAgIGVkZ2VPYmoucG9ydHNvdXJjZSA9IGVsZS5zb3VyY2U7XG4gICAgZWRnZU9iai5wb3J0dGFyZ2V0ID0gZWxlLnRhcmdldDtcblxuICAgIGlmIChlbGUuZXh0ZW5zaW9uICYmIGVsZS5leHRlbnNpb24uaGFzKCdhbm5vdGF0aW9uJykpIHsgLy8gYW5ub3RhdGlvbiBleHRlbnNpb24gd2FzIGZvdW5kXG4gICAgICB2YXIgcmRmRWxlbWVudCA9IGVsZS5leHRlbnNpb24uZ2V0KCdhbm5vdGF0aW9uJykucmRmRWxlbWVudDtcbiAgICAgIGVkZ2VPYmogPSBzZWxmLmhhbmRsZUFubm90YXRpb25zKGVkZ2VPYmosIHJkZkVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChlbGUuZXh0ZW5zaW9uICYmIGVsZS5leHRlbnNpb24uaGFzKFwic2JnbnZpelwiKSl7XG4gICAgICBwYXJzZVN0cmluZyhlbGUuZXh0ZW5zaW9uLmdldChcInNiZ252aXpcIiksIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnNiZ252aXouaGlkZGVuKXtcbiAgICAgICAgICBzdHlsZU9iai5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBjeXRvc2NhcGVKc0VkZ2UgPSB7ZGF0YTogZWRnZU9iaiwgc3R5bGU6IHN0eWxlT2JqfTtcbiAgICBqc29uQXJyYXkucHVzaChjeXRvc2NhcGVKc0VkZ2UpO1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5hcHBseVN0eWxlID0gZnVuY3Rpb24gKHJlbmRlckluZm9ybWF0aW9uLCBub2RlcywgZWRnZXMpIHtcbiAgICAvLyBnZXQgYWxsIGNvbG9yIGlkIHJlZmVyZW5jZXMgdG8gdGhlaXIgdmFsdWVcbiAgICBpZiAocmVuZGVySW5mb3JtYXRpb24ubGlzdE9mQ29sb3JEZWZpbml0aW9ucykge1xuICAgICAgdmFyIGNvbG9yTGlzdCA9IHJlbmRlckluZm9ybWF0aW9uLmxpc3RPZkNvbG9yRGVmaW5pdGlvbnMuY29sb3JEZWZpbml0aW9ucztcbiAgICAgIHZhciBjb2xvcklEVG9WYWx1ZSA9IHt9O1xuICAgICAgZm9yICh2YXIgaT0wOyBpIDwgY29sb3JMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbG9ySURUb1ZhbHVlW2NvbG9yTGlzdFtpXS5pZF0gPSBjb2xvckxpc3RbaV0udmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGdldCBhbGwgYmFja2dyb3VuZCBpbWFnZSBpZCByZWZlcmVuY2VzIHRvIHRoZWlyIHZhbHVlXG4gICAgaWYocmVuZGVySW5mb3JtYXRpb24ubGlzdE9mQmFja2dyb3VuZEltYWdlcyl7XG4gICAgICB2YXIgaW1hZ2VMaXN0ID0gcmVuZGVySW5mb3JtYXRpb24ubGlzdE9mQmFja2dyb3VuZEltYWdlcy5iYWNrZ3JvdW5kSW1hZ2VzO1xuICAgICAgdmFyIGltYWdlSURUb1ZhbHVlID0ge307XG4gICAgICBmb3IgKHZhciBpPTA7IGkgPCBpbWFnZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW1hZ2VJRFRvVmFsdWVbaW1hZ2VMaXN0W2ldLmlkXSA9IGltYWdlTGlzdFtpXS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IHN0eWxlIGxpc3QgdG8gZWxlbWVudElkLWluZGV4ZWQgb2JqZWN0IHBvaW50aW5nIHRvIHN0eWxlXG4gICAgLy8gYWxzbyBjb252ZXJ0IGNvbG9yIHJlZmVyZW5jZXMgdG8gY29sb3IgdmFsdWVzXG4gICAgdmFyIHN0eWxlTGlzdCA9IHJlbmRlckluZm9ybWF0aW9uLmxpc3RPZlN0eWxlcy5zdHlsZXM7XG4gICAgdmFyIG1lbWJlcklEVG9TdHlsZSA9IHt9O1xuICAgIGZvciAodmFyIGk9MDsgaSA8IHN0eWxlTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHN0eWxlID0gc3R5bGVMaXN0W2ldO1xuICAgICAgdmFyIHJlbmRlckdyb3VwID0gc3R5bGUucmVuZGVyR3JvdXA7XG5cbiAgICAgIC8vIGNvbnZlcnQgY29sb3IgcmVmZXJlbmNlc1xuICAgICAgaWYgKHJlbmRlckdyb3VwLnN0cm9rZSAhPSBudWxsICYmIGNvbG9ySURUb1ZhbHVlKSB7XG4gICAgICAgIHJlbmRlckdyb3VwLnN0cm9rZSA9IGNvbG9ySURUb1ZhbHVlW3JlbmRlckdyb3VwLnN0cm9rZV07XG4gICAgICB9XG4gICAgICBpZiAocmVuZGVyR3JvdXAuZmlsbCAhPSBudWxsICYmIGNvbG9ySURUb1ZhbHVlKSB7XG4gICAgICAgIHJlbmRlckdyb3VwLmZpbGwgPSBjb2xvcklEVG9WYWx1ZVtyZW5kZXJHcm91cC5maWxsXTtcbiAgICAgIH1cbiAgICAgIC8vIGNvbnZlcnQgYmFja2dyb3VuZCBpbWFnZSByZWZlcmVuY2VzXG4gICAgICBpZiAocmVuZGVyR3JvdXAuYmFja2dyb3VuZEltYWdlICE9IG51bGwgJiYgaW1hZ2VJRFRvVmFsdWUpIHtcbiAgICAgICAgcmVuZGVyR3JvdXAuYmFja2dyb3VuZEltYWdlID0gaW1hZ2VJRFRvVmFsdWVbcmVuZGVyR3JvdXAuYmFja2dyb3VuZEltYWdlXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlkTGlzdCA9IHN0eWxlLmlkTGlzdC5zcGxpdCgnICcpO1xuICAgICAgZm9yICh2YXIgaj0wOyBqIDwgaWRMaXN0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBpZCA9IGlkTGlzdFtqXTtcbiAgICAgICAgbWVtYmVySURUb1N0eWxlW2lkXSA9IHJlbmRlckdyb3VwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhleFRvRGVjaW1hbCAoaGV4KSB7XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChwYXJzZUludCgnMHgnK2hleCkgLyAyNTUgKiAxMDApIC8gMTAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRIZXhDb2xvciAoaGV4KSB7XG4gICAgICBpZiAoaGV4Lmxlbmd0aCA9PSA3KSB7IC8vIG5vIG9wYWNpdHkgcHJvdmlkZWRcbiAgICAgICAgcmV0dXJuIHtvcGFjaXR5OiBudWxsLCBjb2xvcjogaGV4fTtcbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyBsZW5ndGggb2YgOVxuICAgICAgICB2YXIgY29sb3IgPSBoZXguc2xpY2UoMCw3KTtcbiAgICAgICAgdmFyIG9wYWNpdHkgPSBoZXhUb0RlY2ltYWwoaGV4LnNsaWNlKC0yKSk7XG4gICAgICAgIHJldHVybiB7b3BhY2l0eTogb3BhY2l0eSwgY29sb3I6IGNvbG9yfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZVByb3BNYXAgPSB7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdmaWxsJyxcbiAgICAgICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAnYmFja2dyb3VuZE9wYWNpdHknLFxuICAgICAgJ2JvcmRlci1jb2xvcic6ICdzdHJva2UnLFxuICAgICAgJ2JvcmRlci13aWR0aCc6ICdzdHJva2VXaWR0aCcsXG4gICAgICAnZm9udC1zaXplJzogJ2ZvbnRTaXplJyxcbiAgICAgICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgICAgICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gICAgICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gICAgICAnY29sb3InOiAnZm9udENvbG9yJyxcbiAgICAgICd0ZXh0LWhhbGlnbic6ICd0ZXh0QW5jaG9yJyxcbiAgICAgICd0ZXh0LXZhbGlnbic6ICd2dGV4dEFuY2hvcicsXG4gICAgICAnYmFja2dyb3VuZC1pbWFnZSc6ICdiYWNrZ3JvdW5kSW1hZ2UnLFxuICAgICAgJ2JhY2tncm91bmQtZml0JzogJ2JhY2tncm91bmRGaXQnLFxuICAgICAgJ2JhY2tncm91bmQtcG9zaXRpb24teCc6ICdiYWNrZ3JvdW5kUG9zWCcsXG4gICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbi15JzogJ2JhY2tncm91bmRQb3NZJyxcbiAgICAgICdiYWNrZ3JvdW5kLXdpZHRoJzogJ2JhY2tncm91bmRXaWR0aCcsXG4gICAgICAnYmFja2dyb3VuZC1oZWlnaHQnOiAnYmFja2dyb3VuZEhlaWdodCcsXG4gICAgICAnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5JzogJ2JhY2tncm91bmRJbWFnZU9wYWNpdHknLFxuICAgICAgXG4gICAgfTtcblxuICAgIHZhciBlZGdlUHJvcE1hcCA9IHtcbiAgICAgICdsaW5lLWNvbG9yJzogJ3N0cm9rZScsXG4gICAgICAnd2lkdGgnOiAnc3Ryb2tlV2lkdGgnXG4gICAgfTtcblxuICAgIHZhciBpbmZvYm94UHJvcE1hcCA9IHtcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJ2ZpbGwnLFxuICAgICAgJ2JvcmRlci1jb2xvcic6ICdzdHJva2UnLFxuICAgICAgJ2JvcmRlci13aWR0aCc6ICdzdHJva2VXaWR0aCcsXG4gICAgICAnZm9udC1zaXplJzogJ2ZvbnRTaXplJyxcbiAgICAgICdmb250LXdlaWdodCc6ICdmb250V2VpZ2h0JyxcbiAgICAgICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gICAgICAnZm9udC1mYW1pbHknOiAnZm9udEZhbWlseScsXG4gICAgICAnZm9udC1jb2xvcic6ICdmb250Q29sb3InXG4gICAgfTtcblxuICAgIHZhciBub2RlUHJvcERldGFpbHMgPSB7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IHtcbiAgICAgICAgJ2NvbnZlcnRlcic6IGNvbnZlcnRIZXhDb2xvcixcbiAgICAgICAgJ2V4dHJhLWZpZWxkJzogJ2NvbG9yJ1xuICAgICAgfSxcbiAgICAgLyogICdiYWNrZ3JvdW5kLW9wYWNpdHknOiB7XG4gICAgICAgICdjb252ZXJ0ZXInOiBjb252ZXJ0SGV4Q29sb3IsXG4gICAgICAgICdleHRyYS1maWVsZCc6ICdvcGFjaXR5J1xuICAgICAgfSwgKi9cbiAgICAgICdib3JkZXItY29sb3InOiB7XG4gICAgICAgICdjb252ZXJ0ZXInOiBjb252ZXJ0SGV4Q29sb3IsXG4gICAgICAgICdleHRyYS1maWVsZCc6ICdjb2xvcidcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGVkZ2VQcm9wRGV0YWlscyA9IHtcbiAgICAgICdsaW5lLWNvbG9yJzoge1xuICAgICAgICAnY29udmVydGVyJzogY29udmVydEhleENvbG9yLFxuICAgICAgICAnZXh0cmEtZmllbGQnOiAnY29sb3InXG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBpbmZvYm94UHJvcERldGFpbHMgPSB7XG4gICAgICAnZm9udC1jb2xvcic6IHtcbiAgICAgICAgJ2NvbnZlcnRlcic6IGNvbnZlcnRIZXhDb2xvcixcbiAgICAgICAgJ2V4dHJhLWZpZWxkJzogJ2NvbG9yJ1xuICAgICAgfSxcbiAgICAgICdib3JkZXItY29sb3InOiB7XG4gICAgICAgICdjb252ZXJ0ZXInOiBjb252ZXJ0SGV4Q29sb3IsXG4gICAgICAgICdleHRyYS1maWVsZCc6ICdjb2xvcidcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0RWxlbWVudElkKCBlbGUgKSB7XG4gICAgICByZXR1cm4gZWxlLmRhdGEuaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SW5mb2JveElkKCBpbmZvYm94ICkge1xuICAgICAgcmV0dXJuIGluZm9ib3guaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0RWxlbWVudFN0eWxlUHJvcCggZWxlLCBuYW1lLCB2YWx1ZSApIHtcbiAgICAgIGVsZS5kYXRhWyBuYW1lIF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRJbmZvYm94U3R5bGVQcm9wKCBpbmZvYm94LCBuYW1lLCB2YWx1ZSApIHtcbiAgICAgIGluZm9ib3guc3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRoZSBzdHlsZSB0byBsaXN0IGFuZCBvdmVyd3JpdGUgdGhlIGRlZmF1bHQgc3R5bGVcbiAgICBmdW5jdGlvbiBvdmVycmlkZVN0eWxlUHJvcGVydGllcyggbGlzdCwgcHJvcE1hcCwgcHJvcERldGFpbHMsIGdldElkLCBzZXRTdHlsZVByb3AgKSB7XG4gICAgICBmb3IgKHZhciBpPTA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBtZW1iZXIgPSBsaXN0W2ldO1xuICAgICAgICB2YXIgbWVtYmVyU3R5bGUgPSBtZW1iZXJJRFRvU3R5bGVbIGdldElkKCBtZW1iZXIgKSBdO1xuXG4gICAgICAgIGlmICghbWVtYmVyU3R5bGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBPYmplY3Qua2V5cyggcHJvcE1hcCApLmZvckVhY2goIGZ1bmN0aW9uKCBwcm9wTmFtZSApIHtcbiAgICAgICAgICB2YXIgZmllbGROYW1lID0gcHJvcE1hcFsgcHJvcE5hbWUgXTtcbiAgICAgICAgICB2YXIgZmllbGRWYWwgPSBtZW1iZXJTdHlsZVsgZmllbGROYW1lIF07XG4gICAgICAgICAgaWYgKCBmaWVsZFZhbCApIHtcbiAgICAgICAgICAgIHZhciBkZXRhaWxzID0gcHJvcERldGFpbHMgJiYgcHJvcERldGFpbHNbIHByb3BOYW1lIF07XG4gICAgICAgICAgICBpZiAoIGRldGFpbHMgKSB7XG4gICAgICAgICAgICAgIGlmICggZGV0YWlsc1sgJ2NvbnZlcnRlcicgXSApIHtcbiAgICAgICAgICAgICAgICBmaWVsZFZhbCA9IGRldGFpbHNbICdjb252ZXJ0ZXInIF0oIGZpZWxkVmFsICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoIGRldGFpbHNbICdleHRyYS1maWVsZCcgXSApIHtcbiAgICAgICAgICAgICAgICBmaWVsZFZhbCA9IGZpZWxkVmFsWyBkZXRhaWxzWyAnZXh0cmEtZmllbGQnIF0gXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRTdHlsZVByb3AoIG1lbWJlciwgcHJvcE5hbWUsIGZpZWxkVmFsICk7XG4gICAgICAgICAgfVxuICAgICAgICB9ICk7XG5cbiAgICAgICAgLy8gaWYgdGhlIG1lbWJlciBpcyBhIG5vZGVcbiAgICAgICAgaWYgKCBtZW1iZXIuZGF0YSAmJiBtZW1iZXIuZGF0YS5zdGF0ZXNhbmRpbmZvcyApIHtcbiAgICAgICAgICBvdmVycmlkZVN0eWxlUHJvcGVydGllcyggbWVtYmVyLmRhdGEuc3RhdGVzYW5kaW5mb3MsIGluZm9ib3hQcm9wTWFwLCBpbmZvYm94UHJvcERldGFpbHMsIGdldEluZm9ib3hJZCwgc2V0SW5mb2JveFN0eWxlUHJvcCApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgb3ZlcnJpZGVTdHlsZVByb3BlcnRpZXMoIG5vZGVzLCBub2RlUHJvcE1hcCwgbm9kZVByb3BEZXRhaWxzLCBnZXRFbGVtZW50SWQsIHNldEVsZW1lbnRTdHlsZVByb3AgKTtcbiAgICBvdmVycmlkZVN0eWxlUHJvcGVydGllcyggZWRnZXMsIGVkZ2VQcm9wTWFwLCBlZGdlUHJvcERldGFpbHMsIGdldEVsZW1lbnRJZCwgc2V0RWxlbWVudFN0eWxlUHJvcCApO1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5tYXBQcm9wZXJ0aWVzVG9PYmogPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5tYXAuZXh0ZW5zaW9uICYmIHRoaXMubWFwLmV4dGVuc2lvbi5oYXMoJ21hcFByb3BlcnRpZXMnKSkgeyAvLyByZW5kZXIgZXh0ZW5zaW9uIHdhcyBmb3VuZFxuICAgICAgIHZhciB4bWwgPSB0aGlzLm1hcC5leHRlbnNpb24uZ2V0KCdtYXBQcm9wZXJ0aWVzJyk7XG4gICAgICAgdmFyIG9iajtcbiAgICAgICBwYXJzZVN0cmluZyh4bWwsIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICAgIG9iaiA9IHJlc3VsdDtcbiAgICAgICB9KTtcbiAgICAgICByZXR1cm4gb2JqO1xuICAgIH1lbHNle1xuICAgICAgICBcbiAgICAgICAgICByZXR1cm4ge21hcFByb3BlcnRpZXMgOiB7Y29tcG91bmRQYWRkaW5nIDogbWFpblV0aWxpdGllcy5nZXRDb21wb3VuZFBhZGRpbmcoKX19O1xuICAgICAgICB9XG4gICAgIFxuXG4gICAgXG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmNvbnZlcnQgPSBmdW5jdGlvbiAoeG1sT2JqZWN0LCB1cmxQYXJhbXMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN5dG9zY2FwZUpzTm9kZXMgPSBbXTtcbiAgICB2YXIgY3l0b3NjYXBlSnNFZGdlcyA9IFtdO1xuICAgIHZhciBjb21wYXJ0bWVudENoaWxkcmVuTWFwID0ge307IC8vIE1hcCBjb21wYXJ0bWVudHMgY2hpbGRyZW4gdGVtcG9yYXJpbHlcbiAgICBlbGVtZW50VXRpbGl0aWVzLmZpbGVGb3JtYXQgPSAnc2Jnbm1sJztcblxuICAgIHZhciBzYmduO1xuICAgIHRyeSB7XG4gICAgICB2YXIgeG1sU3RyaW5nID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyh4bWxPYmplY3QpO1xuICAgICAgc2JnbiA9IGxpYnNiZ25qcy5TYmduLmZyb21YTUwoeG1sU3RyaW5nKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IHBhcnNlIHNiZ25tbC4gXCIrIGVycik7XG4gICAgfVxuXG4gICAgdmFyIG1hcDtcbiAgICBpZihzYmduLm1hcHMubGVuZ3RoIDwgMSkgeyAvLyBlbXB0eSBzYmduXG4gICAgICByZXR1cm4ge25vZGVzOiBbXSwgZWRnZXM6IFtdfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBtYXAgPSBzYmduLm1hcHNbMF07IC8vIHRha2UgZmlyc3QgbWFwIG9mIHRoZSBmaWxlIGFzIHRoZSBtYWluIG1hcFxuICAgIH1cblxuICAgIHRoaXMubWFwID0gbWFwO1xuICAgIGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSA9IGVsZW1lbnRVdGlsaXRpZXMubGFuZ3VhZ2VUb01hcFR5cGUobWFwLmxhbmd1YWdlKTtcblxuICAgIHZhciBjb21wYXJ0bWVudHMgPSBzZWxmLmdldEFsbENvbXBhcnRtZW50cyhtYXAuZ2x5cGhzKTtcblxuICAgIHZhciBnbHlwaHMgPSBtYXAuZ2x5cGhzO1xuICAgIHZhciBhcmNzID0gbWFwLmFyY3M7XG5cbiAgICB2YXIgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgZ2x5cGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZ2x5cGggPSBnbHlwaHNbaV07XG5cbiAgICAgIC8vIGxpYnNiZ24gbGlicmFyeSBsaXN0cyB0aGUgZ2x5cGhzIG9mIGNvbXBsZXhlcyBpbiBlbGUuZ2x5cGhNZW1iZXJzIGJ1dCBpdCBkb2VzIG5vdCBzdG9yZSB0aGUgZ2x5cGhzIG9mIGNvbXBhcnRtZW50c1xuICAgICAgLy8gc3RvcmUgZ2x5cGggbWVtYmVycyBvZiBjb21wYXJ0bWVudHMgaGVyZS5cbiAgICAgIHZhciBjb21wYXJ0bWVudFJlZiA9IGdseXBoLmNvbXBhcnRtZW50UmVmO1xuXG4gICAgICBpZiAoZ2x5cGguY2xhc3NfID09PSAnY29tcGFydG1lbnQnKSB7XG4gICAgICAgIGlmIChjb21wYXJ0bWVudENoaWxkcmVuTWFwW2dseXBoLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tcGFydG1lbnRDaGlsZHJlbk1hcFtnbHlwaC5pZF0gPSBnbHlwaC5nbHlwaE1lbWJlcnM7XG4gICAgICAgIH1cblxuICAgICAgICBnbHlwaC5nbHlwaE1lbWJlcnMgPSBjb21wYXJ0bWVudENoaWxkcmVuTWFwW2dseXBoLmlkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBhcnRtZW50UmVmKSB7XG4gICAgICAgIGlmIChjb21wYXJ0bWVudENoaWxkcmVuTWFwW2NvbXBhcnRtZW50UmVmXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29tcGFydG1lbnRDaGlsZHJlbk1hcFtjb21wYXJ0bWVudFJlZl0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb21wYXJ0bWVudENoaWxkcmVuTWFwW2NvbXBhcnRtZW50UmVmXS5wdXNoKGdseXBoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cbiAgICBpZih1cmxQYXJhbXMgJiYgdXJsUGFyYW1zLmNvbXBvdW5kUGFkZGluZykge1xuICAgICAgbWFpblV0aWxpdGllcy5zZXRDb21wb3VuZFBhZGRpbmcoTnVtYmVyKHVybFBhcmFtcy5jb21wb3VuZFBhZGRpbmcpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIW1hcC5leHRlbnNpb24pIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2x5cGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcbiAgICAgICAvLyBpZihnbHlwaC5jbGFzc18gPT0gXCJjb21wbGV4XCIpY29udGludWU7XG4gICAgICAgIGNoaWxkTm9kZXMgPSBnbHlwaC5nbHlwaE1lbWJlcnMuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKXsgcmV0dXJuIGNoaWxkLmNsYXNzXyAhPSBcInN0YXRlIHZhcmlhYmxlXCIgJiYgY2hpbGQuY2xhc3NfICE9IFwidW5pdCBvZiBpbmZvcm1hdGlvblwifSk7XG4gICAgICAgIGlmKGNoaWxkTm9kZXMubGVuZ3RoID4gMCl7IC8vIGNvbXBvdW5kIG5vZGVcbiAgICAgICAgICB2YXIgaGFzTWluID0gZmFsc2U7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZE5vZGVzLmxlbmd0aDsgaisrKSB7ICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2pdO1xuICAgICAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhjaGlsZE5vZGUuY2xhc3NfKVtcImJvcmRlci13aWR0aFwiXTtcbiAgICAgICAgICAgIHZhciBzdGF0ZUFuZEluZm9zID0gY2hpbGROb2RlLmdseXBoTWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpeyByZXR1cm4gY2hpbGQuY2xhc3NfID09IFwic3RhdGUgdmFyaWFibGVcIiB8fCBjaGlsZC5jbGFzc18gPT0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCJ9KTtcbiAgICAgICAgICAgIGlmKHN0YXRlQW5kSW5mb3MubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgIGZvcih2YXIgayA9IDAgOyBrPHN0YXRlQW5kSW5mb3MubGVuZ3RoOyBrKyspe1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZUJib3ggPSBzdGF0ZUFuZEluZm9zW2tdLmJib3g7XG4gICAgICAgICAgICAgICAgaWYoc3RhdGVCYm94LnkgLSBnbHlwaC5iYm94LnkgPCBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4pe1xuICAgICAgICAgICAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gc3RhdGVCYm94LnkgLSBnbHlwaC5iYm94LnkgLSBib3JkZXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgIGhhc01pbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHN0YXRlQmJveC54IC0gZ2x5cGguYmJveC54IDwgbWluRGlzdGFuY2VUb0NoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IHN0YXRlQmJveC54IC0gZ2x5cGguYmJveC54IC0gYm9yZGVyV2lkdGg7XG4gICAgICAgICAgICAgICAgICBoYXNNaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKGdseXBoLmJib3gueSArICBnbHlwaC5iYm94LmggLSAoc3RhdGVCYm94LnkgKyBzdGF0ZUJib3guaCkgIDwgbWluRGlzdGFuY2VUb0NoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IGdseXBoLmJib3gueSArICBnbHlwaC5iYm94LmggLSAoc3RhdGVCYm94LnkgKyBzdGF0ZUJib3guaCkgLSBib3JkZXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgIGhhc01pbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGdseXBoLmJib3gueCArICBnbHlwaC5iYm94LncgLSAoc3RhdGVCYm94LnggKyBzdGF0ZUJib3gudykgIDwgbWluRGlzdGFuY2VUb0NoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IGdseXBoLmJib3gueCArICBnbHlwaC5iYm94LncgLSAoc3RhdGVCYm94LnggKyBzdGF0ZUJib3gudykgLSBib3JkZXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgIGhhc01pbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlQmJveCA9IGNoaWxkTm9kZS5iYm94OyBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgbGVmdCA9Y2hpbGROb2RlQmJveC54IC0gZ2x5cGguYmJveC54IC0gYm9yZGVyV2lkdGgvMjtcbiAgICAgICAgICAgIHZhciByaWdodCA9ICAoZ2x5cGguYmJveC54ICsgZ2x5cGguYmJveC53KSAtIChjaGlsZE5vZGVCYm94LnggKyBjaGlsZE5vZGVCYm94LncpIC0gYm9yZGVyV2lkdGgvMjtcbiAgICAgICAgICAgIHZhciB0b3AgPSBjaGlsZE5vZGVCYm94LnkgLSBnbHlwaC5iYm94LnkgLSBib3JkZXJXaWR0aC8yO1xuICAgICAgICAgICAgdmFyIGJvdHRvbSA9IChnbHlwaC5iYm94LnkgKyBnbHlwaC5iYm94LmgpIC0gKGNoaWxkTm9kZUJib3gueSArIGNoaWxkTm9kZUJib3guaCkgLSBib3JkZXJXaWR0aC8yO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZihsZWZ0IDwgbWluRGlzdGFuY2VUb0NoaWxkcmVuKXtcbiAgICAgICAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gbGVmdDtcbiAgICAgICAgICAgICAgaGFzTWluID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHJpZ2h0IDwgbWluRGlzdGFuY2VUb0NoaWxkcmVuKXtcbiAgICAgICAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gcmlnaHQ7XG4gICAgICAgICAgICAgIGhhc01pbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0b3AgPCBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4pe1xuICAgICAgICAgICAgICBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gPSB0b3A7XG4gICAgICAgICAgICAgIGhhc01pbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihib3R0b20gPCBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4pe1xuICAgICAgICAgICAgICBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gPSBib3R0b207XG4gICAgICAgICAgICAgIGhhc01pbiA9IHRydWU7XG4gICAgICAgICAgICB9ICAgICAgICAgICBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihoYXNNaW4pe1xuICAgICAgICAgICAgaWYoZ2x5cGguY2xhc3NfID09IFwiY29tcGxleFwiKXtcbiAgICAgICAgICAgICAgdmFyIHN0YXRlQW5kSW5mb3MgPSBnbHlwaC5nbHlwaE1lbWJlcnMuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKXsgcmV0dXJuIGNoaWxkLmNsYXNzXyA9PSBcInN0YXRlIHZhcmlhYmxlXCIgfHwgY2hpbGQuY2xhc3NfID09IFwidW5pdCBvZiBpbmZvcm1hdGlvblwifSk7XG4gICAgICAgICAgICAgIHZhciBleHRyYUNvbXBsZXhQYWRkaW5nID0gdHlwZW9mIG9wdGlvbnMuZXh0cmFDb21wbGV4UGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZXh0cmFDb21wbGV4UGFkZGluZy5jYWxsKCkgOiBvcHRpb25zLmV4dHJhQ29tcGxleFBhZGRpbmc7XG4gICAgICAgICAgICAgIGlmKGdseXBoLmxhYmVsICE9IHVuZGVmaW5lZCAmJiBnbHlwaC5sYWJlbC50ZXh0ICE9IHVuZGVmaW5lZCAmJiBnbHlwaC5sYWJlbC50ZXh0Lmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IG1pbkRpc3RhbmNlVG9DaGlsZHJlbiAtIDAuNSAqIGV4dHJhQ29tcGxleFBhZGRpbmc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoYXNUb3BCb3R0b21JbmZvID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlQW5kSW5mb3MuZm9yRWFjaChmdW5jdGlvbihzdGF0ZUFuZEluZm8pe1xuICAgICAgICAgICAgICAgICAgICAgIGlmKCBOdW1iZXIoKHN0YXRlQW5kSW5mby5iYm94LnkgKyBzdGF0ZUFuZEluZm8uYmJveC5oLzIpLnRvRml4ZWQoMikpID09IE51bWJlcigoZ2x5cGguYmJveC55ICsgZ2x5cGguYmJveC5oKS50b0ZpeGVkKDIpKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNUb3BCb3R0b21JbmZvID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgIFxuICAgICAgICAgICAgICAgICAgICBpZihoYXNUb3BCb3R0b21JbmZvKXtcbiAgICAgICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gPSBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gLSAwLjUgKiBleHRyYUNvbXBsZXhQYWRkaW5nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH1lbHNlIGlmKHN0YXRlQW5kSW5mb3MubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuIC09IDI7XG4gICAgICAgICAgICAgIH1cbiAgXG4gIFxuICBcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICB2YXIgZXh0cmFDb21wYXJ0bWVudFBhZGRpbmcgPSB0eXBlb2Ygb3B0aW9ucy5leHRyYUNvbXBhcnRtZW50UGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZXh0cmFDb21wYXJ0bWVudFBhZGRpbmcuY2FsbCgpIDogb3B0aW9ucy5leHRyYUNvbXBhcnRtZW50UGFkZGluZztcbiAgICAgICAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gbWluRGlzdGFuY2VUb0NoaWxkcmVuIC0gZXh0cmFDb21wYXJ0bWVudFBhZGRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuXG4gICAgICAgIH1cbiAgICAgIH0gICBcbiAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gTWF0aC5yb3VuZChtaW5EaXN0YW5jZVRvQ2hpbGRyZW4pO1xuICAgICAgICB2YXIgbmV3UGFkZGluZyA9IG1pbkRpc3RhbmNlVG9DaGlsZHJlbiAtIDE7IC8vIGNvbWVzIGZyb20gY3l0b3NjYXBlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGJvdW5kaW5nIGJveCB3aGljaCBpcyBvdXRlcndpZHRoICsgMSAob24gZWFjaCBzaWRlKVxuICAgICAgICBpZihuZXdQYWRkaW5nIDwgMCB8fCBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gPT0gTWF0aC5yb3VuZChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpe1xuICAgICAgICAgIG5ld1BhZGRpbmcgPSAwO1xuICAgICAgICB9XG4gICAgICAgIG1haW5VdGlsaXRpZXMuc2V0Q29tcG91bmRQYWRkaW5nKG5ld1BhZGRpbmcpO1xuICAgICAgXG4gICAgIFxuICAgIH1lbHNle1xuICAgICAgbWFpblV0aWxpdGllcy5zZXRDb21wb3VuZFBhZGRpbmcoTnVtYmVyKHNlbGYubWFwUHJvcGVydGllc1RvT2JqKCkubWFwUHJvcGVydGllcy5jb21wb3VuZFBhZGRpbmcpKTtcbiAgICB9XG5cbiAgICBcblxuICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcbiAgICAgIHNlbGYudHJhdmVyc2VOb2RlcyhnbHlwaCwgY3l0b3NjYXBlSnNOb2RlcywgJycsIGNvbXBhcnRtZW50cyxtaW5EaXN0YW5jZVRvQ2hpbGRyZW4pO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBhcmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYXJjID0gYXJjc1tpXTtcbiAgICAgIHNlbGYuYWRkQ3l0b3NjYXBlSnNFZGdlKGFyYywgY3l0b3NjYXBlSnNFZGdlcywgeG1sT2JqZWN0KTtcbiAgICB9XG5cbiAgICBpZiAobWFwLmV4dGVuc2lvbiAmJiBtYXAuZXh0ZW5zaW9uLmhhcygncmVuZGVySW5mb3JtYXRpb24nKSkgeyAvLyByZW5kZXIgZXh0ZW5zaW9uIHdhcyBmb3VuZFxuICAgICAgc2VsZi5hcHBseVN0eWxlKG1hcC5leHRlbnNpb24uZ2V0KCdyZW5kZXJJbmZvcm1hdGlvbicpLCBjeXRvc2NhcGVKc05vZGVzLCBjeXRvc2NhcGVKc0VkZ2VzKTtcbiAgICB9XG5cbiAgICB2YXIgY3l0b3NjYXBlSnNHcmFwaCA9IHt9O1xuICAgIGN5dG9zY2FwZUpzR3JhcGgubm9kZXMgPSBjeXRvc2NhcGVKc05vZGVzO1xuICAgIGN5dG9zY2FwZUpzR3JhcGguZWRnZXMgPSBjeXRvc2NhcGVKc0VkZ2VzO1xuXG4gICAgdGhpcy5pbnNlcnRlZE5vZGVzID0ge307XG5cblxuICAgIHZhciBzaG91bGREaXNhYmxlUG9ydHMgPSBmYWxzZTtcbiAgICBjeXRvc2NhcGVKc0dyYXBoLm5vZGVzLmZvckVhY2goZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYoKG5vZGUuZGF0YS5iYm94LncgPT0gMCB8fCBpc05hTihub2RlLmRhdGEuYmJveC53KSkgJiYgKG5vZGUuZGF0YS5iYm94LmggPT0gMCB8fCBpc05hTihub2RlLmRhdGEuYmJveC5oKSkpe1xuICAgICAgICBub2RlLmRhdGEuYmJveC53ID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhub2RlLmRhdGEuY2xhc3MpLndpZHRoO1xuICAgICAgICBub2RlLmRhdGEuYmJveC5oID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyhub2RlLmRhdGEuY2xhc3MpLmhlaWdodDsgICAgIFxuICAgICAgIC8vIG5vZGUuZGF0YS5iYm94LnggPSAxNTsgICAgIFxuICAgICAgIC8vIG5vZGUuZGF0YS5iYm94LnkgPSAxMDsgXG4gICAgICB9IFxuICAgICAgbm9kZS5kYXRhLnBvcnRzLmZvckVhY2goZnVuY3Rpb24ocG9ydCl7XG4gICAgICAgIGlmIChpc05hTihwb3J0LngpIHx8IGlzTmFOKHBvcnQueSkpe1xuICAgICAgICAgIHNob3VsZERpc2FibGVQb3J0cyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pOyAgICAgXG4gICAgfSk7IFxuXG4gICAgICBpZihzaG91bGREaXNhYmxlUG9ydHMpeyAgICAgIFxuICAgICAgZ3JhcGhVdGlsaXRpZXMuZGlzYWJsZVBvcnRzKCk7XG4gICAgfVxuICAgIC8vZ2V0RGVmYXVsdFByb3BlcnRpZXNcbiAgICAvL2VsZW1lbnRVdGlsaXRpZXMubm9kZVR5cGVzLmZvckVhY2goZnVuY3Rpb24odHlwZSl7XG4gICAgLy8gIGNvbnNvbGUubG9nKGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXModHlwZSkpO1xuICAgIC8vfSk7XG4gICAgXG4gICAgLy9jb25zb2xlLmxvZyhjeXRvc2NhcGVKc0dyYXBoKTtcbiAgICAvL2NvbnNvbGUubG9nKCBlbGVtZW50VXRpbGl0aWVzLm5vZGVUeXBlcyk7XG4gICAgcmV0dXJuIGN5dG9zY2FwZUpzR3JhcGg7XG4gIH07XG4gIFxuICAgIHNiZ25tbFRvSnNvbi5kb1ZhbGlkYXRpb24gPSBmdW5jdGlvbih4bWxTdHJpbmcpIHtcbiAgIFx0dmFyIGVycm9ycyA9IFtdO1xuXHQgICAgdHJ5IHtcbiAgICAgIFx0XHQgZXJyb3JzID0gbGlic2JnbmpzLlNiZ24uZG9WYWxpZGF0aW9uKHhtbFN0cmluZyk7XG4gICBcdCAgIH1cbiAgICBcdCAgY2F0Y2ggKGVycikge1xuICAgICAgXHRcdHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBkbyB2YWxpZGF0aW9uLiBcIisgZXJyKTtcbiAgICBcdCAgfVxuXHQgIHJldHVybiBlcnJvcnM7XG4gIH07XG5cbiAgcmV0dXJuIHNiZ25tbFRvSnNvbjtcbn07XG5cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGpzb25Ub1NiZ25tbCwgZWxlbWVudFV0aWxpdGllcywgY3k7XG5cbiAgICBmdW5jdGlvbiBzYmdubWxUb1NibWwocGFyYW0pIHtcbiAgICAgICAganNvblRvU2Jnbm1sID0gcGFyYW0uanNvblRvU2Jnbm1sQ29udmVydGVyO1xuICAgICAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgICAgICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICAgIH1cblxuXG4gICAgc2Jnbm1sVG9TYm1sLmNvbnZlcnQgPSBmdW5jdGlvbiAoeG1sLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgY29udmVyc2lvbkFwaVVybCA9IFwiaHR0cHM6Ly9taW5lcnZhLXNlcnZpY2UubGNzYi51bmkubHUvbWluZXJ2YS9hcGkvY29udmVydC9TQkdOLU1MOlNCTUxcIjtcblxuICAgICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICAgIHR5cGU6ICdwb3N0JyxcbiAgICAgICAgICAgIHVybDogY29udmVyc2lvbkFwaVVybCxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcInRleHQveG1sOyBjaGFyc2V0PVVURi04XCIsXG4gICAgICAgICAgICBkYXRhOiB4bWwsXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSwgdGV4dFN0YXR1cywgeGhyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7cmVzdWx0OiBmYWxzZSwgZXJyb3I6IGRhdGEsIG1lc3NhZ2U6IFwiSW52YWxpZCByZXNwb25zZSBjb2RlOiBcIiArIHhoci5zdGF0dXN9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh7cmVzdWx0OiB0cnVlLCBtZXNzYWdlOiBkYXRhLCBlcnJvcjogXCJcIn0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soe3Jlc3VsdDogZmFsc2UsIGVycm9yOiBlcnJvciwgbWVzc2FnZTogXCJcIn0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhaWw6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtyZXN1bHQ6IGZhbHNlLCBlcnJvcjogZXJyb3IsIG1lc3NhZ2U6IFwiXCJ9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHNiZ25tbFRvU2JtbDtcblxufVxuICAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBqc29uVG9TYmdubWwsIGVsZW1lbnRVdGlsaXRpZXMsIGN5O1xuXG4gIGZ1bmN0aW9uIHNibWxUb1NiZ25tbChwYXJhbSkge1xuICAgIGpzb25Ub1NiZ25tbCA9IHBhcmFtLmpzb25Ub1NiZ25tbENvbnZlcnRlcjtcbiAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG4gIH1cblxuXG4gIHNibWxUb1NiZ25tbC5jb252ZXJ0ID0gZnVuY3Rpb24gKHhtbCwgY2FsbGJhY2spIHtcbiAgICAgIHZhciBjb252ZXJzaW9uQXBpVXJsID0gXCJodHRwczovL21pbmVydmEtc2VydmljZS5sY3NiLnVuaS5sdS9taW5lcnZhL2FwaS9jb252ZXJ0L1NCTUw6U0JHTi1NTFwiO1xuXG4gICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICB0eXBlOiAncG9zdCcsXG4gICAgICAgICAgdXJsOiBjb252ZXJzaW9uQXBpVXJsLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBcInRleHQveG1sOyBjaGFyc2V0PVVURi04XCIsXG4gICAgICAgICAgZGF0YTogeG1sLFxuICAgICAgICAgIGRhdGFUeXBlOiBcInRleHRcIixcbiAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSwgdGV4dFN0YXR1cywgeGhyKSB7XG4gICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtyZXN1bHQ6IGZhbHNlLCBlcnJvcjogZGF0YSwgbWVzc2FnZTogXCJJbnZhbGlkIHJlc3BvbnNlIGNvZGU6IFwiICsgeGhyLnN0YXR1c30pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2FsbGJhY2soe3Jlc3VsdDogdHJ1ZSwgbWVzc2FnZTogZGF0YSwgZXJyb3I6IFwiXCJ9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICBjYWxsYmFjayh7cmVzdWx0OiBmYWxzZSwgZXJyb3I6IGVycm9yLCBtZXNzYWdlOiBcIlwifSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe3Jlc3VsdDogZmFsc2UsIGVycm9yOiBlcnJvciwgbWVzc2FnZTogXCJcIn0pO1xuICAgICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgXG4gIH1cblxuICByZXR1cm4gc2JtbFRvU2Jnbm1sO1xuXG59XG4iLCJ2YXIgdGRQYXJzZXIgPSByZXF1aXJlKCcuL3RhYi1kZWxpbWV0ZWQtcGFyc2VyJyk7XG5cbmZ1bmN0aW9uIHN0clRvU2V0KCBzdHIsIHNwbGl0QnkgKSB7XG4gIHZhciBzZXQgPSB7fTtcbiAgdmFyIGxpc3QgPSBzdHIgPyBzdHIuc3BsaXQoIHNwbGl0QnkgKSA6IFtdO1xuXG4gIGxpc3QuZm9yRWFjaCggZnVuY3Rpb24oIG1lbWJlciApIHtcbiAgICBzZXRbIG1lbWJlciBdID0gdHJ1ZTtcbiAgfSApO1xuXG4gIHJldHVybiBzZXQ7XG59XG5cbmZ1bmN0aW9uIGdldEVtcHR5R3JhcGhEYXRhKCkge1xuICByZXR1cm4geyBub2RlczogW10sIGVkZ2VzOiBbXSB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBlbGVtZW50VXRpbGl0aWVzO1xuXG4gIGZ1bmN0aW9uIHNpZlRvSnNvbihwYXJhbSkge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICB9XG5cbiAgc2lmVG9Kc29uLmluaXRHcmFwaFZhcmlhYmxlcyA9IGZ1bmN0aW9uKCkge1xuICAgIHNpZlRvSnNvbi5ncmFwaERhdGEgPSBnZXRFbXB0eUdyYXBoRGF0YSgpO1xuICAgIHNpZlRvSnNvbi5uYW1lVG9Ob2RlID0ge307XG4gICAgc2lmVG9Kc29uLmtleVRvRWRnZSA9IHt9O1xuICAgIC8vIHNldCBvZiBub2RlcyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gYW4gZWRnZVxuICAgIHNpZlRvSnNvbi5ub2RlV2l0aFNwZWNpZmllZENsYXNzID0ge307XG4gIH1cblxuICBzaWZUb0pzb24uZGVmYXVsdE5vZGVUeXBlID0gJ1NJRiBtYWNyb21vbGVjdWxlJztcblxuICBzaWZUb0pzb24ubWVyZ2VHcmFwaERhdGEgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gWyAuLi5zaWZUb0pzb24uZ3JhcGhEYXRhLm5vZGVzLCAuLi5zaWZUb0pzb24uZ3JhcGhEYXRhLmVkZ2VzIF07XG4gIH07XG5cbiAgc2lmVG9Kc29uLmNvbnZlcnQgPSBmdW5jdGlvbiggZ3JhcGhUZXh0ICkge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuZmlsZUZvcm1hdCA9ICdzaWYnO1xuICAgIGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSA9ICdTSUYnO1xuXG4gICAgc2lmVG9Kc29uLmluaXRHcmFwaFZhcmlhYmxlcygpO1xuXG4gICAgaWYgKCBncmFwaFRleHQgPT0gdW5kZWZpbmVkICkge1xuICAgICAgcmV0dXJuIHNpZlRvSnNvbi5ncmFwaERhdGE7XG4gICAgfVxuXG4gICAgdmFyIGxpbmVzID0gdGRQYXJzZXIuZ2V0TGluZXNBcnJheSggZ3JhcGhUZXh0LnRvU3RyaW5nKCkgKTtcblxuICAgIGxpbmVzLmZvckVhY2goIGZ1bmN0aW9uKCBsaW5lICkge1xuICAgICAgdmFyIHRhYnMgPSB0ZFBhcnNlci5nZXRUYWJzQXJyYXkoIGxpbmUgKTtcblxuICAgICAgLy8gbGluZSByZXByZXNlbnRzIGEgbm9kZVxuICAgICAgaWYgKCB0YWJzLmxlbmd0aCA9PT0gMSApIHtcbiAgICAgICAgdmFyIG5vZGVOYW1lID0gdGFic1sgMCBdO1xuICAgICAgICAvLyBjcmVhdGUgdGhlIG5vZGUgaWYgZG9lcyBub3QgZXhpc3QgeWV0XG4gICAgICAgIC8vIGlmIHRoZSBub2RlIGlzIGp1c3QgY3JlYXRlZCBpdCB3aWxsIGhhdmUgdGhlIGRlZmF1bHQgbm9kZSBjbGFzc1xuICAgICAgICBzaWZUb0pzb24uZ2V0T3JDcmVhdGVOb2RlKCBub2RlTmFtZSApO1xuICAgICAgfVxuICAgICAgLy8gbGluZSByZXByZXNlbnRzIGFuIGVkZ2UgYW5kIHRoZSBjb25uZWN0ZWQgbm9kZXNcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgc3JjTmFtZSA9IHRhYnNbIDAgXTtcbiAgICAgICAgdmFyIGVkZ2VUeXBlID0gdGFic1sgMSBdO1xuICAgICAgICB2YXIgdGd0TmFtZSA9IHRhYnNbIDIgXTtcbiAgICAgICAgdmFyIHBjSURTZXQgPSBzdHJUb1NldCggdGFic1sgMyBdLCAvO3wgLyApO1xuICAgICAgICB2YXIgc2l0ZUxvY1NldCA9IHN0clRvU2V0KCB0YWJzWyA0IF0sICc7JyApO1xuXG4gICAgICAgIHZhciBzcmNDbGFzcyA9IHNpZlRvSnNvbi5nZXROb2RlQ2xhc3MoIGVkZ2VUeXBlLCAnc3JjJyApO1xuICAgICAgICB2YXIgdGd0Q2xhc3MgPSBzaWZUb0pzb24uZ2V0Tm9kZUNsYXNzKCBlZGdlVHlwZSwgJ3RndCcgKTtcblxuICAgICAgICAvLyBjcmVhdGUgbm9kZXMgaWYgdGhleSBkbyBub3QgZXhpc3QgeWV0XG4gICAgICAgIC8vIGlmIHRoZSBub2RlIGFscmVhZHkgZXhpc3RzIHRoZSBub2RlIHR5cGUgYW5kIHNvIHRoZSBkZWZhdWx0IHZhbHVlc1xuICAgICAgICAvLyB3aWxsIGJlIHVwZGF0ZWRcbiAgICAgICAgc2lmVG9Kc29uLmdldE9yQ3JlYXRlTm9kZSggc3JjTmFtZSwgc3JjQ2xhc3MgKTtcbiAgICAgICAgc2lmVG9Kc29uLmdldE9yQ3JlYXRlTm9kZSggdGd0TmFtZSwgdGd0Q2xhc3MgKTtcblxuICAgICAgICAvLyBjcmVhdGUgdGhlIGVkZ2UgaWYgaXQgZG9lcyBub3QgZXhpc3QgeWV0XG4gICAgICAgIHNpZlRvSnNvbi5nZXRPckNyZWF0ZUVkZ2UoIHNyY05hbWUsIGVkZ2VUeXBlLCB0Z3ROYW1lLCBwY0lEU2V0LCBzaXRlTG9jU2V0ICk7XG4gICAgICB9XG4gICAgfSApO1xuXG4gICAgcmV0dXJuIHNpZlRvSnNvbi5tZXJnZUdyYXBoRGF0YSgpO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5nZXROb2RlQnlOYW1lID0gZnVuY3Rpb24oIG5hbWUgKSB7XG4gICAgcmV0dXJuIHNpZlRvSnNvbi5uYW1lVG9Ob2RlWyBuYW1lIF07XG4gIH07XG5cbiAgc2lmVG9Kc29uLmdldEVkZ2VCeVByb3BzID0gZnVuY3Rpb24oIHNyY05hbWUsIHR5cGUsIHRndE5hbWUgKSB7XG4gICAgdmFyIGtleSA9IHNpZlRvSnNvbi5jYWxjdWxhdGVFZGdlS2V5KCBzcmNOYW1lLCB0eXBlLCB0Z3ROYW1lICk7XG4gICAgcmV0dXJuIHNpZlRvSnNvbi5rZXlUb0VkZ2VbIGtleSBdO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5tYXBOb2RlVG9OYW1lID0gZnVuY3Rpb24oIG5vZGUsIG5hbWUgKSB7XG4gICAgc2lmVG9Kc29uLm5hbWVUb05vZGVbIG5hbWUgXSA9IG5vZGU7XG4gIH07XG5cbiAgc2lmVG9Kc29uLm1hcEVkZ2VUb0tleSA9IGZ1bmN0aW9uKCBlZGdlLCBrZXkgKSB7XG4gICAgc2lmVG9Kc29uLmtleVRvRWRnZVsga2V5IF0gPSBlZGdlO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5jYWxjdWxhdGVFZGdlS2V5ID0gZnVuY3Rpb24oIHNyYywgdHlwZSwgdGd0ICkge1xuICAgIHJldHVybiBbIHNyYywgdHlwZSwgdGd0IF0uam9pbiggJyAnICk7XG4gIH07XG5cbiAgc2lmVG9Kc29uLmdldE9yQ3JlYXRlTm9kZSA9IGZ1bmN0aW9uKCBuYW1lLCBjbGFzc05hbWUgKSB7XG4gICAgLy8gc2F2ZSBpZiBjbGFzcyBuYW1lIHBhcmFtZXRlciBpcyBzZXRcbiAgICB2YXIgY2xhc3NOYW1lU3BlY2lmaWVkID0gISFjbGFzc05hbWU7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IHNpZlRvSnNvbi5kZWZhdWx0Tm9kZVR5cGU7XG5cbiAgICB2YXIgbm9kZSA9IHNpZlRvSnNvbi5nZXROb2RlQnlOYW1lKCBuYW1lICk7XG4gICAgdmFyIGRlZmF1bHRzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyggY2xhc3NOYW1lICk7XG5cbiAgICB2YXIgdXBkYXRlV2l0aERlZmF1bHRzID0gZnVuY3Rpb24oKSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZE5vZGVEYXRhV2l0aENsYXNzRGVmYXVsdHMoIG5vZGUuZGF0YSwgY2xhc3NOYW1lICk7XG4gICAgICBub2RlLmRhdGEuYmJveC5oID0gZGVmYXVsdHMuaGVpZ2h0O1xuXG4gICAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuY2FuSGF2ZVNCR05MYWJlbCggY2xhc3NOYW1lICkgKSB7XG4gICAgICAgIHZhciBpc0R5bmFtaWNMYWJlbCA9IHNpZlRvSnNvbi5nZXRNYXBQcm9wZXJ0eSggJ2FkanVzdE5vZGVMYWJlbEZvbnRTaXplQXV0b21hdGljYWxseScgKTtcblxuICAgICAgICB2YXIgZm9udFNpemU7XG4gICAgICAgIHZhciBmb250RmFtaWx5ID0gbm9kZS5kYXRhWyAnZm9udC1mYW1pbHknIF07XG5cbiAgICAgICAgaWYgKCBpc0R5bmFtaWNMYWJlbCApIHtcbiAgICAgICAgICB2YXIgZHluYW1pY0xhYmVsU2l6ZSA9IHNpZlRvSnNvbi5nZXRNYXBQcm9wZXJ0eSggJ2R5bmFtaWNMYWJlbFNpemUnICk7XG4gICAgICAgICAgdmFyIGNvZWZmID0gZWxlbWVudFV0aWxpdGllcy5nZXREeW5hbWljTGFiZWxTaXplQ29lZmZpY2llbnQoIGR5bmFtaWNMYWJlbFNpemUgKTtcbiAgICAgICAgICB2YXIgb2JqID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBub2RlLmRhdGEuYmJveC5oLFxuICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZVxuICAgICAgICAgIH07XG4gICAgICAgICAgZm9udFNpemUgPSBlbGVtZW50VXRpbGl0aWVzLmdldER5bmFtaWNMYWJlbFRleHRTaXplKCBvYmosIGNvZWZmICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm9udFNpemUgPSBub2RlLmRhdGFbICdmb250LXNpemUnIF07XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWF4ID0gMjUwO1xuICAgICAgICBub2RlLmRhdGEuYmJveC53ID0gZWxlbWVudFV0aWxpdGllcy5nZXRXaWR0aEJ5Q29udGVudCggbmFtZSwgZm9udEZhbWlseSwgZm9udFNpemUsIHsgbWF4IH0gKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBub2RlLmRhdGEuYmJveC53ID0gZGVmYXVsdHMud2lkdGg7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICggbm9kZSA9PSB1bmRlZmluZWQgKSB7XG4gICAgICB2YXIgdWlkID0gZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZU5vZGVJZCgpO1xuICAgICAgbm9kZSA9IHt9O1xuXG4gICAgICBub2RlLmRhdGEgPSB7XG4gICAgICAgIGlkOiB1aWQsXG4gICAgICAgIGxhYmVsOiBuYW1lLFxuICAgICAgICBjbGFzczogY2xhc3NOYW1lLFxuICAgICAgICBiYm94OiB7XG4gICAgICAgICAgeDogMCxcbiAgICAgICAgICB5OiAwXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXRlc2FuZGluZm9zOiBbXSxcbiAgICAgICAgcG9ydHM6IFtdXG4gICAgICB9O1xuXG4gICAgICB1cGRhdGVXaXRoRGVmYXVsdHMoKTtcblxuICAgICAgc2lmVG9Kc29uLm1hcE5vZGVUb05hbWUoIG5vZGUsIG5hbWUgKTtcbiAgICAgIHNpZlRvSnNvbi5ncmFwaERhdGEubm9kZXMucHVzaCggbm9kZSApO1xuICAgIH1cbiAgICAvLyBpZiBjbGFzcyBuYW1lIHBhcmFtZXRlciBpcyBzZXQgYW5kIHRoZSBhbHJlYWR5IGV4aXN0aW5nIG5vZGUgaGFzIGEgZGlmZmVyZW50XG4gICAgLy8gY2xhc3MgbmFtZSBjaGVjayBpZiB0aGUgZXhpc3Rpbmcgbm9kZSBoYXMgYSBzcGVjaWZpZWQgY2xhc3Mgb3IganVzdCB1c2VkIHRoZVxuICAgIC8vIGRlZmF1bHQgb25lIGJlY2F1c2UgaXQgd2FzIG5vdCBjb21pbmcgZnJvbSBhbiBlZGdlLlxuICAgIC8vIEluIGZpcnN0IGNhc2UgZ2l2ZSBhIHdhcm5pbmcgYW5kIGRvIG5vdCB1cGRhdGUgdGhlIGNsYXNzLFxuICAgIC8vIGluIHNlY29uZCBjYXNlIHVwZGF0ZSB0aGUgY2xhc3MgYW5kIHRoZSBub2RlIGRhdGEgd2l0aCBkZWZhdWx0c1xuICAgIGVsc2UgaWYgKCBjbGFzc05hbWVTcGVjaWZpZWQgJiYgbm9kZS5kYXRhLmNsYXNzICE9PSBjbGFzc05hbWUgKSB7XG4gICAgICBpZiAoIHNpZlRvSnNvbi5ub2RlV2l0aFNwZWNpZmllZENsYXNzWyBuYW1lIF0gKSB7XG4gICAgICAgIGNvbnNvbGUud2FybiggJ1R5cGUgb2Ygbm9kZSAnICsgbmFtZSArICcgY2Fubm90IGJlIHVwZGF0ZWQgYXMgJ1xuICAgICAgICAgICAgICAgICAgICArIGNsYXNzTmFtZSArICcgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSBzcGVjaWZpZWQgYXMgJyArIG5vZGUuZGF0YS5jbGFzcyApO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG5vZGUuZGF0YS5jbGFzcyA9IGNsYXNzTmFtZTtcbiAgICAgICAgdXBkYXRlV2l0aERlZmF1bHRzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCBjbGFzc05hbWVTcGVjaWZpZWQgKSB7XG4gICAgICBzaWZUb0pzb24ubm9kZVdpdGhTcGVjaWZpZWRDbGFzc1sgbmFtZSBdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcblxuICBzaWZUb0pzb24uZ2V0T3JDcmVhdGVFZGdlID0gZnVuY3Rpb24oIHNyY05hbWUsIHR5cGUsIHRndE5hbWUsIHBjSURTZXQsIHNpdGVMb2NTZXQgKSB7XG4gICAgdmFyIGVkZ2UgPSBzaWZUb0pzb24uZ2V0RWRnZUJ5UHJvcHMoIHNyY05hbWUsIHR5cGUsIHRndE5hbWUgKTtcblxuICAgIGlmICggZWRnZSA9PSB1bmRlZmluZWQgKSB7XG4gICAgICB2YXIgdWlkID0gZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZUVkZ2VJZCgpO1xuICAgICAgdmFyIHNvdXJjZSA9IHNpZlRvSnNvbi5nZXROb2RlQnlOYW1lKCBzcmNOYW1lICkuZGF0YS5pZDtcbiAgICAgIHZhciB0YXJnZXQgPSBzaWZUb0pzb24uZ2V0Tm9kZUJ5TmFtZSggdGd0TmFtZSApLmRhdGEuaWQ7XG4gICAgICBlZGdlID0ge307XG4gICAgICBlZGdlLmRhdGEgPSB7XG4gICAgICAgIGlkOiB1aWQsXG4gICAgICAgIHBjSURTZXQsXG4gICAgICAgIHNpdGVMb2NTZXQsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgdGFyZ2V0LFxuICAgICAgICBjbGFzczogdHlwZVxuICAgICAgfTtcblxuICAgICAgZWxlbWVudFV0aWxpdGllcy5leHRlbmRFZGdlRGF0YVdpdGhDbGFzc0RlZmF1bHRzKCBlZGdlLmRhdGEsIHR5cGUgKTtcblxuICAgICAgdmFyIGtleSA9IHNpZlRvSnNvbi5jYWxjdWxhdGVFZGdlS2V5KCBzcmNOYW1lLCB0eXBlLCB0Z3ROYW1lICk7XG4gICAgICBzaWZUb0pzb24ubWFwRWRnZVRvS2V5KCBlZGdlLCBrZXkgKTtcbiAgICAgIHNpZlRvSnNvbi5ncmFwaERhdGEuZWRnZXMucHVzaCggZWRnZSApO1xuICAgIH1cblxuICAgIHJldHVybiBlZGdlO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5nZXROb2RlQ2xhc3MgPSBmdW5jdGlvbiggZWRnZVR5cGUsIHJvbGUgKSB7XG4gICAgdmFyIHR5cGU7XG5cbiAgICBzd2l0Y2ggKGVkZ2VUeXBlKSB7XG4gICAgICBjYXNlICdjb250cm9scy1wcm9kdWN0aW9uLW9mJzpcbiAgICAgIGNhc2UgJ2NvbnRyb2xzLXRyYW5zcG9ydC1vZi1jaGVtaWNhbCc6XG4gICAgICAgIHR5cGUgPSAoIHJvbGUgPT09ICdzcmMnID8gJ1NJRiBtYWNyb21vbGVjdWxlJyA6ICdTSUYgc2ltcGxlIGNoZW1pY2FsJyApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbnN1bXB0aW9uLWNvbnRyb2xlZC1ieSc6XG4gICAgICBjYXNlICdjaGVtaWNhbC1hZmZlY3RzJzpcbiAgICAgICAgdHlwZSA9ICggcm9sZSA9PT0gJ3NyYycgPyAnU0lGIHNpbXBsZSBjaGVtaWNhbCcgOiAnU0lGIG1hY3JvbW9sZWN1bGUnICk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVhY3RzLXdpdGgnOlxuICAgICAgY2FzZSAndXNlZC10by1wcm9kdWNlJzpcbiAgICAgICAgdHlwZSA9ICdTSUYgc2ltcGxlIGNoZW1pY2FsJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0eXBlID0gJ1NJRiBtYWNyb21vbGVjdWxlJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGU7XG4gIH07XG5cbiAgc2lmVG9Kc29uLmdldE1hcFByb3BlcnR5ID0gZnVuY3Rpb24oIHByb3BOYW1lICkge1xuICAgIHJldHVybiBzaWZUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqKClbICdtYXBQcm9wZXJ0aWVzJyBdWyBwcm9wTmFtZSBdO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5tYXBQcm9wZXJ0aWVzVG9PYmogPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFwUHJvcGVydGllczoge1xuICAgICAgICBkeW5hbWljTGFiZWxTaXplOiAnbGFyZ2UnLFxuICAgICAgICBhZGp1c3ROb2RlTGFiZWxGb250U2l6ZUF1dG9tYXRpY2FsbHk6IHRydWVcbiAgICAgIH1cbiAgICB9O1xuICB9O1xuXG4gIHJldHVybiBzaWZUb0pzb247XG59O1xuIiwiZnVuY3Rpb24gdGRQYXJzZXIoKSB7XG59O1xuXG50ZFBhcnNlci5nZXRUYWJzQXJyYXkgPSBmdW5jdGlvbiggbGluZSApIHtcbiAgcmV0dXJuIGxpbmUuc3BsaXQoICdcXHQnICk7XG59O1xuXG50ZFBhcnNlci5nZXRMaW5lc0FycmF5ID0gZnVuY3Rpb24oIGNvbnRlbnQgKSB7XG4gIHZhciBzZXBhcmF0b3IgPSAvXFxyP1xcbnxcXHIvO1xuICB2YXIgbm90RW1wdHkgPSBmdW5jdGlvbiggbGluZSApIHtcbiAgICByZXR1cm4gbGluZSAhPT0gJyc7XG4gIH07XG4gIHJldHVybiBjb250ZW50LnNwbGl0KCBzZXBhcmF0b3IgKS5maWx0ZXIoIG5vdEVtcHR5ICk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHRkUGFyc2VyO1xuIiwidmFyIGxpYnNiZ25qcyA9IHJlcXVpcmUoJ2xpYnNiZ24uanMnKTtcbnZhciBwYXJzZVN0cmluZyA9IHJlcXVpcmUoJ3htbDJqcycpLnBhcnNlU3RyaW5nO1xudmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpO1xudmFyIGNsYXNzZXMgPSByZXF1aXJlKCcuL2NsYXNzZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGVsZW1lbnRVdGlsaXRpZXM7XG5cblx0ZnVuY3Rpb24gdGRUb0pzb24ocGFyYW0pIHtcblx0XHRvcHRpb25VdGlsaXRpZXMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXM7XG5cdFx0b3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG5cdFx0ZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG5cdH1cblxuXHR0ZFRvSnNvbi5tYXAgPSB1bmRlZmluZWQ7XG5cblx0dGRUb0pzb24uZWRnZVR5cGVzPSB7IFxuXHRcdCdwb3NpdGl2ZSBpbmZsdWVuY2UnOiB0cnVlLCBcblx0XHQnbmVnYXRpdmUgaW5mbHVlbmNlJzogdHJ1ZSwgXG5cdFx0J3Vua25vd24gaW5mbHVlbmNlJzogdHJ1ZSwgXG5cdFx0J25lY2Fzc2FyeSBpbmZsdWVuY2UnOiB0cnVlLFxuXHRcdCdsb2dpYyBhcmNzJzogdHJ1ZSwgXG5cdFx0J2VxdWl2YWxhbmNlIGFyY3MnOiB0cnVlIFxuXHR9O1xuXG5cdHRkVG9Kc29uLm5vZGVUeXBlcz0ge1xuXHRcdCdiaW9sb2dpY2FsIGFjdGl2aXR5JzogJ0JBIHBsYWluJyxcblx0XHQnbWFjcm9tb2xlY3VsZSc6ICdCQSBtYWNyb21vbGVjdWxlJywgXG5cdFx0J2NvbXBsZXgnOiAnQkEgY29tcGxleCcsIFxuXHRcdCdzaW1wbGUgY2hlbWljYWwnOiAnQkEgc2ltcGxlIGNoZW1pY2FsJywgXG5cdFx0J3Vuc3BlY2lmaWVkIGVudGl0eSc6ICdCQSB1bnNwZWNpZmllZCBlbnRpdHknLCBcblx0XHQnbnVjbGVpYyBhY2lkIGZlYXR1cmUnOiAnQkEgbnVjbGVpYyBhY2lkIGZlYXR1cmUnLFxuXHRcdCdwZXJ0dXJiaW5nIGFnZW50JzonQkEgcGVydHVyYmluZyBhZ2VudCcsIFxuXHRcdCdwaGVub3R5cGUnOiAncGhlbm90eXBlJywgXG5cdFx0J2NvbXBhcnRtZW50JzogJ2NvbXBhcnRtZW50JywgXG5cdFx0J3N1Ym1hcCc6ICdzdWJtYXAnLCBcblx0XHQndGFnJzogJ3RhZycsIFxuXHRcdCdhbmQnOiAnYW5kJywgXG5cdFx0J29yJzogJ29yJywgXG5cdFx0J25vdCc6ICdub3QnLCBcblx0XHQnZGVsYXknOiAnZGVsYXknXG5cdH07XG5cblx0dGRUb0pzb24udmFsaWRhdGVOb2RlVHlwZSA9IGZ1bmN0aW9uKCB0eXBlKXtcblx0XHR2YXIgX3R5cGUgPSB0eXBlLnJlcGxhY2UoL18vZywgJyAnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiB0aGlzLm5vZGVUeXBlcy5oYXNPd25Qcm9wZXJ0eShfdHlwZSk7XG5cdH07XG5cblx0dGRUb0pzb24udmFsaWRhdGVFZGdlVHlwZSA9IGZ1bmN0aW9uKCB0eXBlKXtcblx0XHR2YXIgX3R5cGUgPSB0eXBlLnJlcGxhY2UoL18vZywgJyAnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiB0aGlzLmVkZ2VUeXBlcy5oYXNPd25Qcm9wZXJ0eShfdHlwZSk7XG5cdH07XG5cblx0dGRUb0pzb24uY29udmVydFR5cGVUb0NsYXNzID0gZnVuY3Rpb24oIGVsZSwgdHlwZSwgaXNOb2RlKXtcblx0XHR2YXIgX3R5cGUgPSB0eXBlLnJlcGxhY2UoL18vZywgJyAnKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGVsZS5kYXRhLmNsYXNzID0gaXNOb2RlID8gdGhpcy5ub2RlVHlwZXNbX3R5cGVdIDogX3R5cGU7XG5cdH07XG5cblx0dGRUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqID0gZnVuY3Rpb24oKXtcblx0XHRyZXR1cm4geyBtYXBQcm9wZXJ0aWVzOiB0aGlzLm1hcC5tYXBQcm9wZXJ0aWVzfTtcblx0fTtcblxuXHQvKipcblx0ICogQWRkcyBzdGF0ZXMgYW5kIGluZm9ib3ggaW5mb3JtYXRpb24gdG8gZ2l2ZW4gbm9kZVxuXHQgKiBAcGFyYW0gbm9kZSA6IGEgbm9kZSBvYmplY3Rcblx0ICovXG5cdHRkVG9Kc29uLmFkZEluZm9Cb3ggPSBmdW5jdGlvbihub2RlKXtcblx0XHR2YXIgX2NsYXNzID0gbm9kZS5kYXRhLmNsYXNzO1xuXHRcdGlmIChfY2xhc3Muc3RhcnRzV2l0aChcIkJBXCIpICYmIF9jbGFzcyAhPSBcIkJBIHBsYWluXCIpe1xuXHRcdFx0dmFyIHVuaXRPZkluZm9ybWF0aW9uID0gY2xhc3Nlcy5Vbml0T2ZJbmZvcm1hdGlvbi5jb25zdHJ1Y3QoKTtcblx0XHRcdHVuaXRPZkluZm9ybWF0aW9uLnBhcmVudCA9IG5vZGUuZGF0YS5pZDtcblx0XHRcdC8vIGZpbGUgZm9ybWF0IGRvZXMgbm90IGNvbnRhaW4gYmJveCBpbmZvcm1hdGlvbiwgaGVuY2UgZGVmaW5lIHRoZW0gYmVsb3dcblx0XHRcdHVuaXRPZkluZm9ybWF0aW9uLmJib3ggPSB7eDogMjUsIHk6IC01MCwgdzogMzAsIGg6IDEyfTtcblx0XHRcdGNsYXNzZXMuVW5pdE9mSW5mb3JtYXRpb24uc2V0QW5jaG9yU2lkZSh1bml0T2ZJbmZvcm1hdGlvbik7XG5cdFx0XHRub2RlLmRhdGEuc3RhdGVzYW5kaW5mb3MgPSBbdW5pdE9mSW5mb3JtYXRpb25dO1xuXHRcdH0gZWxzZXtcblx0XHRcdG5vZGUuZGF0YS5zdGF0ZXNhbmRpbmZvcyA9IFtdO1xuXHRcdH1cblx0fVxuXG5cdHRkVG9Kc29uLmNvbnZlcnQgPSBmdW5jdGlvbiggZ3JhcGhUZXh0KXtcblx0XHRlbGVtZW50VXRpbGl0aWVzLmZpbGVGb3JtYXQgPSAndGQnO1xuXHRcdGlmKCBncmFwaFRleHQgPT09IHVuZGVmaW5lZClcblx0XHR7XG5cdFx0XHRyZXR1cm4geyBub2RlczogW10sIGVkZ2VzOiBbXX07XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dmFyIG1hcCA9IHt9O1xuXHRcdFx0dmFyIG5vZGVzID0gW107IC8vSG9sZHMgbm9kZXNcblx0XHRcdHZhciBlZGdlcyA9IFtdOyAvL0hvbGRzIGVkZ2VzXG5cdFx0XHR0aGlzLm1hcCA9IG1hcDtcblxuXHRcdFx0Ly9EZWZpbmUgdGhlIGxpbmUgc2VwYXJhdG9yXG5cdFx0XHQvLyBcXHJcXG4sIFxcbiBhbmQgXFxyIGxpbmUgc2VwYXJhdG9yc1xuXHRcdFx0dmFyIHNlcGFyYXRvciA9IC9cXHI/XFxufFxcci87XG5cdFx0XHR2YXIgbGluZXMgPSBncmFwaFRleHQudG9TdHJpbmcoKS5zcGxpdCggc2VwYXJhdG9yKTtcblx0XHRcdHZhciBncmFwaERhdGFJbmRleCA9IDQ7IC8vZ3JhcGggZGF0YSBzdGFydHMgYXQgaW5kZXggNFxuXHRcdFx0dmFyIGVkZ2VzU3RhcnRJbmRleCA9IC0xOyAvL3Vua293biBhdCB0aGUgYmVnaW5pbmdcblxuXHRcdFx0dmFyIGZvcm1hdFZlcnNpb24gPSBsaW5lc1swXTtcblxuXHRcdFx0aWYoIGZvcm1hdFZlcnNpb24ubGVuZ3RoIDwgMTAgfHwgZm9ybWF0VmVyc2lvbi5zdWJzdHJpbmcoMCwxMCkudG9Mb3dlckNhc2UoKSAhPSAnc2JnbnZpeiBhZicpXG5cdFx0XHR7XG5cdFx0XHRcdHRocm93IFwiV3JvbmcgZmlsZSBmb3JtYXQhXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKCBmb3JtYXRWZXJzaW9uLmxlbmd0aCA9PSAxMCl7XG5cdFx0XHRcdGZvcm1hdFZlcnNpb24gPSBmb3JtYXRWZXJzaW9uICsgXCIgMS4wXCI7IC8vZGVmYXVsdCAxLjBcblx0XHRcdH1cblx0XHRcdHZhciB0aXRsZSA9IGxpbmVzWzFdO1xuXHRcdFx0dmFyIGRlc2NyaXB0aW9uID0gbGluZXNbMl07XG5cdFx0XHQvL1NlY29uZCBlbGVtZW50IG9mIHRoZSBmb3JtYXQgdmVyc2lvbiBzcGVjaWZpZXMgbWFwIGxhbmd1YWdlXG5cdFx0XHR2YXIgbWFwTGFuZ3VhZ2UgPSAoZm9ybWF0VmVyc2lvbi50b1N0cmluZygpLnNwbGl0KFwiIFwiKSlbMV07IFxuXHRcdFx0ZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlID0gbWFwTGFuZ3VhZ2U7XG5cdFx0XHRtYXAubWFwUHJvcGVydGllcyA9IHt9O1xuXHRcdFx0bWFwLm1hcFByb3BlcnRpZXMubWFwRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcblx0XHRcdG1hcC5tYXBQcm9wZXJ0aWVzLm1hcE5hbWUgPSB0aXRsZTtcblx0XHRcdC8vc3RhcnQgdG8gcGFyc2UgdGhlIGdyYXBoXG5cdFx0XHRmb3IoIHZhciBpID0gZ3JhcGhEYXRhSW5kZXg7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKyl7XG5cblx0XHRcdFx0Ly9ibGFuayBsaW5lIGluZGljYXRlcyB0aGF0IG5vZGVzIGFyZSBmaW5pc2hlZFxuXHRcdFx0XHQvL3NvIGNvbnRpbnVlIHdpdGggZWRnZXNcblx0XHRcdFx0aWYoIGxpbmVzW2ldLmxlbmd0aCA9PT0gMCB8fCBsaW5lc1tpXSA9PT0gXCJcIil7XG5cdFx0XHRcdFx0d2hpbGUoIGxpbmVzW2ldID09PSBcIlwiICYmIGkgPCBsaW5lcy5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0XHRpKys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVkZ2VzU3RhcnRJbmRleCA9IGkgKyAyO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly9QYXJzZSB0aGUgbm9kZSBkYXRhXG5cdFx0XHRcdHZhciBkYXRhID0gbGluZXNbaV0udG9TdHJpbmcoKS5zcGxpdCgnXFx0Jyk7IC8vZWFjaCBkYXRhIHNlcGVyYXRlZCBieSB0YWJcblx0XHRcdFx0dmFyIG5vZGVOYW1lID0gZGF0YVswXTtcblxuXHRcdFx0XHQvL0lmIHRoZXJlIGlzIG5vIGJsYW5rIGxpbmVcblx0XHRcdFx0aWYoIG5vZGVOYW1lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PSAnLS1lZGdlX2lkJyl7XG5cdFx0XHRcdFx0ZWRnZXNTdGFydEluZGV4ID0gaSArIDE7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgbm9kZUlkID0gZGF0YVsxXTtcblx0XHRcdFx0dmFyIG5vZGVUeXBlID0gZGF0YVsyXTtcblx0XHRcdFx0dmFyIHBhcmVudElEID0gZGF0YVszXTtcblx0XHRcdFx0dmFyIHBvc1ggPSAoIGRhdGEubGVuZ3RoID4gNCkgPyBkYXRhWzRdIDogXCIwXCI7IC8vaWYgcG9zWCBub3QgZ2l2ZW5cblx0XHRcdFx0dmFyIHBvc1kgPSAoIGRhdGEubGVuZ3RoID4gNSkgPyBkYXRhWzVdIDogXCIwXCI7IC8vaWYgcG9zWSBub3QgZ2l2ZW5cblx0XHRcdFx0dmFyIG5vZGVXaWR0aCA9ICggZGF0YS5sZW5ndGggPiA2KSA/IGRhdGFbNl0gOiB1bmRlZmluZWQ7XG5cdFx0XHRcdHZhciBub2RlSGVpZ2h0ID0gKCBkYXRhLmxlbmd0aCA+IDcpID8gZGF0YVs3XSA6IHVuZGVmaW5lZDtcblxuXHRcdFx0XHQvL2FkZCBwYXJzZWQgTm9kZVxuXHRcdFx0XHR2YXIgbmV3Tm9kZSA9IHtcblx0XHRcdFx0XHRncm91cDogJ25vZGVzJyxcblx0XHRcdFx0XHRkYXRhOlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGlkOiBub2RlSWQsXG5cdFx0XHRcdFx0XHRsYWJlbDogbm9kZU5hbWUsXG5cdFx0XHRcdFx0XHRwb3J0czogW10sXG5cdFx0XHRcdFx0XHRiYm94OiB7XG5cdFx0XHRcdFx0XHRcdHg6IHBhcnNlRmxvYXQoIHBvc1gpLFxuXHRcdFx0XHRcdFx0XHR5OiBwYXJzZUZsb2F0KCBwb3NZKSxcblx0XHRcdFx0XHRcdFx0dzogbm9kZVdpZHRoLFxuXHRcdFx0XHRcdFx0XHRoOiBub2RlSGVpZ2h0XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiggdGhpcy52YWxpZGF0ZU5vZGVUeXBlKCBub2RlVHlwZSkpe1xuXHRcdFx0XHRcdHRoaXMuY29udmVydFR5cGVUb0NsYXNzKCBuZXdOb2RlLCBub2RlVHlwZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0dGhpcy5hZGRJbmZvQm94KG5ld05vZGUpO1xuXHRcdFx0XHR9IGVsc2V7XG5cdFx0XHRcdFx0dGhyb3cgXCJOb2RlIHR5cGUgbWlzbWF0Y2hlZC4uLlwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIHBhcmVudElEICE9ICctMScpe1xuXHRcdFx0XHRcdG5ld05vZGUuZGF0YS5wYXJlbnQgPSBwYXJlbnRJRDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggbmV3Tm9kZS5kYXRhLmNsYXNzICkge1xuXHRcdFx0XHRcdGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kTm9kZURhdGFXaXRoQ2xhc3NEZWZhdWx0cyggbmV3Tm9kZS5kYXRhLCBuZXdOb2RlLmRhdGEuY2xhc3MgKTtcblxuXHRcdFx0XHRcdGlmICggIW5ld05vZGUuZGF0YS5iYm94LncgfHwgIW5ld05vZGUuZGF0YS5iYm94LmggKSB7XG5cdFx0XHRcdFx0XHR2YXIgZGVmYXVsdHMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBuZXdOb2RlLmRhdGEuY2xhc3MgKTtcblx0XHRcdFx0XHRcdG5ld05vZGUuZGF0YS5iYm94LncgPSBuZXdOb2RlLmRhdGEuYmJveC53IHx8IGRlZmF1bHRzLndpZHRoO1xuXHRcdFx0XHRcdFx0bmV3Tm9kZS5kYXRhLmJib3guaCA9IG5ld05vZGUuZGF0YS5iYm94LmggfHwgZGVmYXVsdHMuaGVpZ2h0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdG5vZGVzLnB1c2gobmV3Tm9kZSk7XG5cblx0XHRcdH1cblxuXHRcdFx0Ly9TdGFydCBwYXJzaW5nIGVkZ2VzXG5cdFx0XHRmb3IoIHZhciBpID0gZWRnZXNTdGFydEluZGV4OyBpIDwgbGluZXMubGVuZ3RoIDsgaSsrKXtcblx0XHRcdFx0Ly9FT0YgZmluaXNoIGxvb3Bcblx0XHRcdFx0aWYoIGxpbmVzW2ldLmxlbmd0aCA9PT0gMCl7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGRhdGEgPSBsaW5lc1tpXS50b1N0cmluZygpLnNwbGl0KCdcXHQnKTtcblx0XHRcdFx0dmFyIGVkZ2VJRCA9IGRhdGFbMF07XG5cdFx0XHRcdHZhciBlZGdlU291cmNlID0gZGF0YVsxXTtcblx0XHRcdFx0dmFyIGVkZ2VUYXJnZXQgPSBkYXRhWzJdO1xuXHRcdFx0XHR2YXIgZWRnZVR5cGUgPSBkYXRhWzNdO1xuXG5cdFx0XHRcdHZhciBuZXdFZGdlID0ge1xuXHRcdFx0XHRcdGdyb3VwOiAnZWRnZXMnLFxuXHRcdFx0XHRcdGRhdGE6XG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0aWQ6IGVkZ2VJRCxcblx0XHRcdFx0XHRcdHNvdXJjZTogZWRnZVNvdXJjZSxcblx0XHRcdFx0XHRcdHRhcmdldDogZWRnZVRhcmdldFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblxuXHRcdFx0XHRpZiggdGhpcy52YWxpZGF0ZUVkZ2VUeXBlKCBlZGdlVHlwZSkpXG5cdFx0XHRcdFx0dGhpcy5jb252ZXJ0VHlwZVRvQ2xhc3MoIG5ld0VkZ2UsIGVkZ2VUeXBlKTtcblx0XHRcdFx0ZWxzZXtcblx0XHRcdFx0XHR0aHJvdyBcIkVkZ2UgVHlwZSBtaXNtYXRjaGVkLi4uXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRlbGVtZW50VXRpbGl0aWVzLmV4dGVuZEVkZ2VEYXRhV2l0aENsYXNzRGVmYXVsdHMoIG5ld0VkZ2UuZGF0YSwgbmV3RWRnZS5kYXRhLmNsYXNzICk7XG5cblx0XHRcdFx0ZWRnZXMucHVzaCggbmV3RWRnZSk7XG5cdFx0XHR9XG5cdFx0XHR2YXIganNHcmFwaCA9IHt9O1xuXHRcdFx0anNHcmFwaC5ub2RlcyA9IG5vZGVzO1xuXHRcdFx0anNHcmFwaC5lZGdlcyA9IGVkZ2VzO1xuXHRcdFx0cmV0dXJuIGpzR3JhcGg7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiB0ZFRvSnNvbjtcbn07XG4iLCIvKlxuICogVGV4dCB1dGlsaXRpZXMgZm9yIGNvbW1vbiB1c2FnZVxuICovXG5cbnZhciB0ZXh0VXRpbGl0aWVzID0ge1xuICAvLyBzYW1lIHB1cnBvc2UgYXMgcHJldmlvdXMgb25lLCBidXQgd2l0aCBjbGVhcmVyIHJlc3BvbnNpYmlsaXR5XG4gIHRydW5jYXRlOiBmdW5jdGlvbih0ZXh0LCBmb250LCB3aWR0aCkge1xuICAgIHRleHQgPSB0ZXh0ICsgXCJcIjtcbiAgICB2YXIgY29udGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICBjb250ZXh0LmZvbnQgPSBmb250O1xuICAgIC8vIGNoZWNrIHRyaXZpYWwgY2FzZSBmaXJzdCwgd2hlbiBlbnRpcmUgdGV4dCBpcyBhbHJlYWR5IHNtYWxsIGVub3VnaFxuICAgIGlmKGNvbnRleHQubWVhc3VyZVRleHQodGV4dCkud2lkdGggPCB3aWR0aCkge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIGVsbGlwc2lzID0gXCIuLlwiO1xuICAgICAgLy8gaWYgZWxsaXBzaXMgYWxvbmUgaXMgYWxyZWFkeSB0b28gbGFyZ2VcbiAgICAgIGlmKGNvbnRleHQubWVhc3VyZVRleHQoZWxsaXBzaXMpLndpZHRoID4gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG5cbiAgICAgIHZhciBmaW5hbExlbmd0aDsgLy8gdGhpcyBzaG91bGQgYWx3YXlzIGhhdmUgYSB2YWx1ZSBhZnRlciB0aGUgbG9vcFxuICAgICAgZm9yKHZhciBpPTA7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzdWJ0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaSkgKyBlbGxpcHNpcztcbiAgICAgICAgaWYgKGNvbnRleHQubWVhc3VyZVRleHQoc3VidGV4dCkud2lkdGggPiB3aWR0aCkgeyAvLyB3ZSdyZSB0b28gZmFyLCB0YWtlIHRoZSBwcmV2aW91cyBpbmRleFxuICAgICAgICAgIGZpbmFsTGVuZ3RoID0gaSA+IDAgPyBpLTEgOiAwO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGV4dC5zdWJzdHJpbmcoMCwgZmluYWxMZW5ndGgpICsgZWxsaXBzaXM7XG4gICAgfVxuICB9LFxuXG4gIC8vIGVuc3VyZSB0aGF0IHJldHVybmVkIHN0cmluZyBmb2xsb3dzIHhzZDpJRCBzdGFuZGFyZFxuICAvLyBzaG91bGQgZm9sbG93IHInXlthLXpBLVpfXVtcXHcuLV0qJCdcbiAgZ2V0WE1MVmFsaWRJZDogZnVuY3Rpb24ob3JpZ2luYWxJZCkge1xuICAgIHZhciBuZXdJZCA9IFwiXCI7XG4gICAgdmFyIHhtbFZhbGlkUmVnZXggPSAvXlthLXpBLVpfXVtcXHcuLV0qJC87XG4gICAgaWYgKCEgeG1sVmFsaWRSZWdleC50ZXN0KG9yaWdpbmFsSWQpKSB7IC8vIGRvZXNuJ3QgY29tcGx5XG4gICAgICBuZXdJZCA9IG9yaWdpbmFsSWQ7XG4gICAgICBuZXdJZCA9IG5ld0lkLnJlcGxhY2UoL1teXFx3Li1dL2csIFwiXCIpO1xuICAgICAgaWYgKCEgeG1sVmFsaWRSZWdleC50ZXN0KG5ld0lkKSkgeyAvLyBzdGlsbCBkb2Vzbid0IGNvbXBseVxuICAgICAgICBuZXdJZCA9IFwiX1wiICsgbmV3SWQ7XG4gICAgICAgIGlmICghIHhtbFZhbGlkUmVnZXgudGVzdChuZXdJZCkpIHsgLy8gbm9ybWFsbHkgd2Ugc2hvdWxkIG5ldmVyIGVudGVyIHRoaXNcbiAgICAgICAgICAvLyBpZiBmb3Igc29tZSBvYnNjdXJlIHJlYXNvbiB3ZSBzdGlsbCBkb24ndCBjb21wbHksIHRocm93IGVycm9yLlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IG1ha2UgaWRlbnRpZmVyIGNvbXBseSB0byB4c2Q6SUQgcmVxdWlyZW1lbnRzOiBcIituZXdJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdJZDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxJZDtcbiAgICB9XG4gIH0sXG5cbiAgZ2V0V2lkdGhCeUNvbnRlbnQoIGNvbnRlbnQsIGZvbnRGYW1pbHksIGZvbnRTaXplLCBvcHRpb25zICkge1xuICAgIHZhciBERUZBVUxUX01BUkdJTiA9IDU7XG4gICAgdmFyIGxpbmVzID0gY29udGVudC5zcGxpdChcIlxcblwiKTtcbiAgICB2YXIgY29udGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpLmdldENvbnRleHQoJzJkJyk7XG4gICAgLy8gc2hvdWxkIG5vdCBtYWtlIHR5cGUgY2hlY2sgc28gJz09PScgc2hvdWxkIG5vdCBiZSB1c2VkIGhlcmVcbiAgICB2YXIgc2hvdWxkQXBwZW5kID0gcGFyc2VGbG9hdCggZm9udFNpemUgKSA9PSBmb250U2l6ZTtcbiAgICB2YXIgdmFsaWRGb250U2l6ZSA9IHNob3VsZEFwcGVuZCA/IGZvbnRTaXplICsgJ3B4JyA6IGZvbnRTaXplO1xuICAgIGNvbnRleHQuZm9udCA9IHZhbGlkRm9udFNpemUgKyAnICcgKyBmb250RmFtaWx5O1xuXG4gICAgdmFyIHdpZHRoID0gMDtcblxuICAgIGxpbmVzLmZvckVhY2goIGZ1bmN0aW9uKCBsaW5lICkge1xuICAgICAgdmFyIHcgPSBjb250ZXh0Lm1lYXN1cmVUZXh0KGxpbmUpLndpZHRoO1xuICAgICAgaWYgKCB3ID4gd2lkdGggKSB7XG4gICAgICAgIHdpZHRoID0gdztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBtYXJnaW4gPSBvcHRpb25zICYmIG9wdGlvbnMubWFyZ2luO1xuICAgIGlmICggbWFyZ2luID09IG51bGwgKSB7XG4gICAgICBtYXJnaW4gPSBERUZBVUxUX01BUkdJTjtcbiAgICB9XG5cbiAgICB3aWR0aCArPSAyICogbWFyZ2luO1xuXG4gICAgdmFyIG1pbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5taW47XG4gICAgdmFyIG1heCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5tYXg7XG5cbiAgICBpZiAoIG1pbiAhPSBudWxsICYmIHdpZHRoIDwgbWluICkge1xuICAgICAgd2lkdGggPSBtaW47XG4gICAgfVxuICAgIGVsc2UgaWYgKCBtYXggIT0gbnVsbCAmJiB3aWR0aCA+IG1heCApIHtcbiAgICAgIHdpZHRoID0gbWF4O1xuICAgIH1cblxuICAgIHJldHVybiB3aWR0aDtcbiAgfSxcblxuICBGcm9tS2ViYWJUb0NhbWVsQ2FzZSA6IGZ1bmN0aW9uKGlucHV0KXtcbiAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvKC1cXHcpL2csIGZ1bmN0aW9uKG0pe1xuICAgICAgcmV0dXJuIG1bMV0udG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgfSxcblxuICBGcm9tQ2FtZWxUb0tlYmFiQ2FzZSA6IGZ1bmN0aW9uKGlucHV0KXtcbiAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvW1xcd10oW0EtWl0pL2csIGZ1bmN0aW9uKG0pIHtcbiAgICAgIHJldHVybiBtWzBdICsgXCItXCIgKyBtWzFdO1xuICAgIH0pLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB0ZXh0VXRpbGl0aWVzO1xuIiwiLypcbiogQ29tbW9ubHkgbmVlZGVkIFVJIFV0aWxpdGllc1xuKi9cblxudmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpO1xudmFyIGxpYnMgPSBsaWJVdGlsaXRpZXMuZ2V0TGlicygpO1xudmFyIGpRdWVyeSA9ICQgPSBsaWJzLmpRdWVyeTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cbiB2YXIgb3B0aW9uVXRpbGl0aWVzO1xuIHZhciBvcHRpb25zO1xuXG4gZnVuY3Rpb24gdWlVdGlsaXRpZXMgKHBhcmFtKSB7XG4gICBvcHRpb25VdGlsaXRpZXMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXM7XG4gICBvcHRpb25zID0gb3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiB9XG5cbiB1aVV0aWxpdGllcy5zdGFydFNwaW5uZXIgPSBmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICBjbGFzc05hbWUgPSAnZGVmYXVsdC1jbGFzcyc7XG4gICB9XG5cbiAgIGlmICgkKCcuJyArIGNsYXNzTmFtZSkubGVuZ3RoID09PSAwKSB7XG4gICAgIHZhciBjb250YWluZXJXaWR0aCA9ICQob3B0aW9ucy5uZXR3b3JrQ29udGFpbmVyU2VsZWN0b3IpLndpZHRoKCk7XG4gICAgIHZhciBjb250YWluZXJIZWlnaHQgPSAkKG9wdGlvbnMubmV0d29ya0NvbnRhaW5lclNlbGVjdG9yKS5oZWlnaHQoKTtcbiAgICAgJChvcHRpb25zLm5ldHdvcmtDb250YWluZXJTZWxlY3RvciArICc6cGFyZW50JykucHJlcGVuZCgnPGkgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDk5OTk5OTk7IGxlZnQ6ICcgKyBjb250YWluZXJXaWR0aCAvIDIgKyAncHg7IHRvcDogJyArIGNvbnRhaW5lckhlaWdodCAvIDIgKyAncHg7XCIgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXNwaW4gZmEtM3ggZmEtZncgJyArIGNsYXNzTmFtZSArICdcIj48L2k+Jyk7XG4gICB9XG4gfTtcblxuIHVpVXRpbGl0aWVzLmVuZFNwaW5uZXIgPSBmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICBjbGFzc05hbWUgPSAnZGVmYXVsdC1jbGFzcyc7XG4gICB9XG5cbiAgIGlmICgkKCcuJyArIGNsYXNzTmFtZSkubGVuZ3RoID4gMCkge1xuICAgICAkKCcuJyArIGNsYXNzTmFtZSkucmVtb3ZlKCk7XG4gICB9XG4gfTtcblxuIHJldHVybiB1aVV0aWxpdGllcztcbn07XG4iLCIvKlxuICogVGhpcyBmaWxlIGV4cG9ydHMgdGhlIGZ1bmN0aW9ucyB0byBiZSB1dGlsaXplZCBpbiB1bmRvcmVkbyBleHRlbnNpb24gYWN0aW9uc1xuICovXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXG4gIHZhciBlbGVtZW50VXRpbGl0aWVzO1xuICB2YXIgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXk7XG4gIHZhciBtYWluVXRpbGl0aWVzO1xuICB2YXIgY3k7XG5cbiAgZnVuY3Rpb24gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgKHBhcmFtKSB7XG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkgPSBwYXJhbS5leHBlcmltZW50YWxEYXRhT3ZlcmxheTtcbiAgICBtYWluVXRpbGl0aWVzID0gcGFyYW0ubWFpblV0aWxpdGllcztcbiAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVFbGVzU2ltcGxlID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZGVsZXRlRWxlc1NpbXBsZShwYXJhbS5lbGVzKTtcbiAgfTtcblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXN0b3JlRWxlcyA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gICAgdmFyIHBhcmFtID0ge307XG4gICAgcGFyYW0uZWxlcyA9IGVsZW1lbnRVdGlsaXRpZXMucmVzdG9yZUVsZXMoZWxlcyk7XG4gICAgcmV0dXJuIHBhcmFtO1xuICB9O1xuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmRlbGV0ZU5vZGVzU21hcnQgPSBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICBpZiAocGFyYW0uZmlyc3RUaW1lKSB7XG4gICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5kZWxldGVOb2Rlc1NtYXJ0KHBhcmFtLmVsZXMpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5kZWxldGVFbGVzU2ltcGxlKHBhcmFtLmVsZXMpO1xuICB9O1xuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnNldFBvcnRzT3JkZXJpbmcgPSBmdW5jdGlvbihwYXJhbSkge1xuICAgIHZhciBub2RlcyA9IHBhcmFtLm5vZGVzO1xuICAgIHZhciBvcmRlcmluZyA9IHBhcmFtLm9yZGVyaW5nO1xuICAgIHZhciBwb3J0RGlzdGFuY2UgPSBwYXJhbS5wb3J0RGlzdGFuY2U7XG4gICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZXMuY29ubmVjdGVkRWRnZXMoKTtcbiAgICB2YXIgbm9kZVByb3BNYXAgPSB7fTsgLy8gTm9kZSBwcm9wIG1hcCBmb3IgY3VycmVudCBzdGF0dXMgb2YgdGhlIG5vZGVzIGl0IGlzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSByZXN1bHQgbWFwLiBJdCBpbmNsdWRlcyBub2RlIGN1cnJlbnQgcG9ydCBvcmRlcmluZyBhbmQgY3VycmVudCBwb3J0cy5cbiAgICB2YXIgZWRnZVByb3BNYXAgPSB7fTsgLy8gRWRnZSBwcm9wIG1hcCBmb3IgY3VycmVudCBzdGF0dXMgb2YgdGhlIG5vZGVzIGl0IGlzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSByZXN1bHQgbWFwLiBJdCBpbmNsdWRlcyBlZGdlIHBvcnRzb3VyY2UgYW5kIHBvcnR0YXJnZXQuXG5cbiAgICAvLyBGaWxsIG5vZGUvZWRnZSBwcm9wIG1hcHMgZm9yIHVuZG8vcmVkbyBhY3Rpb25zXG5cbiAgICAvLyBOb2RlIHByb3AgbWFwIGluY2x1ZGVzIGEgY29weSBvZiBub2RlIHBvcnRzXG4gICAgZm9yICggdmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKysgKSB7XG4gICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgdmFyIHBvcnRzID0gbm9kZS5kYXRhKCdwb3J0cycpO1xuICAgICAgdmFyIGN1cnJlbnRPcmRlcmluZyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UG9ydHNPcmRlcmluZyhub2RlKTsgLy8gR2V0IHRoZSBjdXJyZW50IG5vZGUgcG9ydHMgb3JkZXJpbmdcbiAgICAgIHZhciBwb3J0c0NvcHkgPSBwb3J0cy5sZW5ndGggPT09IDIgPyBbIHsgaWQ6IHBvcnRzWzBdLmlkLCB4OiBwb3J0c1swXS54LCB5OiBwb3J0c1swXS55IH0sIHsgaWQ6IHBvcnRzWzFdLmlkLCB4OiBwb3J0c1sxXS54LCB5OiBwb3J0c1sxXS55IH0gXSA6IFtdO1xuICAgICAgbm9kZVByb3BNYXBbbm9kZS5pZCgpXSA9IHsgb3JkZXJpbmc6IGN1cnJlbnRPcmRlcmluZywgcG9ydHM6IHBvcnRzQ29weSB9O1xuICAgIH1cblxuICAgIC8vIE5vZGUgcHJvcCBtYXAgaW5jbHVkZXMgZWRnZSBwb3J0c291cmNlIGFuZCBwb3J0dGFyZ2V0XG4gICAgZm9yICggdmFyIGkgPSAwOyBpIDwgY29ubmVjdGVkRWRnZXMubGVuZ3RoOyBpKysgKSB7XG4gICAgICB2YXIgZWRnZSA9IGNvbm5lY3RlZEVkZ2VzW2ldO1xuICAgICAgZWRnZVByb3BNYXBbZWRnZS5pZCgpXSA9IHsgcG9ydHNvdXJjZTogZWRnZS5kYXRhKCdwb3J0c291cmNlJyksIHBvcnR0YXJnZXQ6IGVkZ2UuZGF0YSgncG9ydHRhcmdldCcpIH07XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IHtcbiAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgIG5vZGVQcm9wTWFwOiBub2RlUHJvcE1hcCxcbiAgICAgIGVkZ2VQcm9wTWFwOiBlZGdlUHJvcE1hcFxuICAgIH07XG5cbiAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIGNhbGwgcmVsYXRlZCBtZXRob2QgZnJvbSBlbGVtZW50IHV0aWxpdGllcyBlbHNlIGdvIGJhY2sgdG8gdGhlIHN0b3JlZCBwcm9wcyBvZiBub2Rlcy9lZGdlc1xuICAgIGlmICggcGFyYW0uZmlyc3RUaW1lICkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKG5vZGVzLCBvcmRlcmluZywgcG9ydERpc3RhbmNlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICAgIC8vIEdvIGJhY2sgdG8gc3RvcmVkIG5vZGUgcG9ydHMgc3RhdGVcbiAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrICkge1xuICAgICAgICB2YXIgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICB2YXIgcG9ydHNUb1JldHVybiA9IHBhcmFtLm5vZGVQcm9wTWFwW25vZGUuaWQoKV0ucG9ydHM7XG4gICAgICAgIHZhciBvcmRlcmluZ3NUb1JldHVybiA9IHBhcmFtLm5vZGVQcm9wTWFwW25vZGUuaWQoKV0ub3JkZXJpbmc7XG4gICAgICAgIG5vZGUuZGF0YSgncG9ydHMnLCBwb3J0c1RvUmV0dXJuKTtcbiAgICAgICAgbm9kZS5kYXRhKCdwb3J0c29yZGVyaW5nJywgb3JkZXJpbmdzVG9SZXR1cm4pOyAvLyBVcGRhdGUgdGhlIGNhY2hlZCBwb3J0cyBvcmRlcmluZ1xuICAgICAgfVxuXG4gICAgICAvLyBHbyBiYWNrIHRvIHN0b3JlZCBlZGdlIHBvcnRzb3VyY2UvcG9ydHRhcmdldHMgc3RhdGVcbiAgICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGNvbm5lY3RlZEVkZ2VzLmxlbmd0aDsgaSsrICkge1xuICAgICAgICB2YXIgZWRnZSA9IGNvbm5lY3RlZEVkZ2VzW2ldO1xuICAgICAgICB2YXIgcHJvcHMgPSBwYXJhbS5lZGdlUHJvcE1hcFtlZGdlLmlkKCldO1xuICAgICAgICBlZGdlLmRhdGEoJ3BvcnRzb3VyY2UnLCBwcm9wcy5wb3J0c291cmNlKTtcbiAgICAgICAgZWRnZS5kYXRhKCdwb3J0dGFyZ2V0JywgcHJvcHMucG9ydHRhcmdldCk7XG4gICAgICB9XG5cbiAgICAgIGN5LmVuZEJhdGNoKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlRXhwID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBleHBOYW1lID0gcGFyYW0uZXhwTmFtZTtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaGlkZUV4cChmaWxlTmFtZSwgZXhwTmFtZSk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmhpZGVFeHAgPSBmdW5jdGlvbihwYXJhbSl7XG4gICAgdmFyIGV4cE5hbWUgPSBwYXJhbS5leHBOYW1lO1xuICAgIHZhciBmaWxlTmFtZSA9IHBhcmFtLmZpbGVOYW1lO1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS51bmhpZGVFeHAoZmlsZU5hbWUsIGV4cE5hbWUpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuaGlkZUFsbCA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmhpZGVBbGwoKTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmhpZGVBbGxVbmRvID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBpbnZpc2libGVGaWxlID0gcGFyYW0uaW52aXNpYmxlRmlsZTtcbiAgICB2YXIgaW52aXNpYmxlRXhwID0gcGFyYW0uaW52aXNpYmxlRXhwO1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5oaWRlQWxsVW5kbyhpbnZpc2libGVGaWxlLCBpbnZpc2libGVFeHApO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5oaWRlQWxsID0gZnVuY3Rpb24oKXtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkudW5oaWRlQWxsKCk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmhpZGVBbGxVbmRvID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciB2aXNpYmxlRmlsZSA9IHBhcmFtLnZpc2libGVGaWxlO1xuICAgIHZhciB2aXNpYmxlRXhwID0gcGFyYW0udmlzaWJsZUV4cDtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkudW5oaWRlRmlsZVVuZG8odmlzaWJsZUZpbGUsIHZpc2libGVFeHApO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuaGlkZUZpbGUgPSBmdW5jdGlvbihwYXJhbSl7XG4gICAgdmFyIGZpbGVOYW1lID0gcGFyYW0uZmlsZU5hbWU7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmhpZGVGaWxlKGZpbGVOYW1lKTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmhpZGVGaWxlVW5kbyA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICB2YXIgaW52aXNpYmxlID0gcGFyYW0uaW52aXNpYmxlO1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5oaWRlRmlsZVVuZG8oZmlsZU5hbWUsIGludmlzaWJsZSk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmhpZGVGaWxlID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBmaWxlTmFtZSA9IHBhcmFtLmZpbGVOYW1lO1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS51bmhpZGVGaWxlKGZpbGVOYW1lKTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuaGlkZUZpbGVVbmRvID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBmaWxlTmFtZSA9IHBhcmFtLmZpbGVOYW1lO1xuICAgIHZhciB2aXNpYmxlID0gcGFyYW0udmlzaWJsZTtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkudW5oaWRlRmlsZVVuZG8oZmlsZU5hbWUsIHZpc2libGUpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkRXhwID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBmaWxlTmFtZSA9IHBhcmFtLmZpbGVOYW1lO1xuICAgIHZhciBleHBOYW1lID0gcGFyYW0uZXhwTmFtZTtcbiAgICB2YXIgaXNWaXNpYmxlID0gcGFyYW0uaXNWaXNpYmxlO1xuICAgIHZhciB2YWx1ZXMgPSBwYXJhbS52YWx1ZXM7XG4gICAgdmFyIGdyb3VwQXJyYXkgPSBwYXJhbS5ncm91cEFycmF5O1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5hZGRFeHAoZmlsZU5hbWUsIGV4cE5hbWUsIGlzVmlzaWJsZSwgdmFsdWVzLCBncm91cEFycmF5KTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZUV4cCA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICB2YXIgZXhwTmFtZSA9IHBhcmFtLmV4cE5hbWU7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnJlbW92ZUV4cChmaWxlTmFtZSwgZXhwTmFtZSk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5hZGRGaWxlID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBmaWxlTmFtZSA9IHBhcmFtLmZpbGVOYW1lO1xuICAgIHZhciBwYXJzZWQgPSBwYXJhbS5wYXJzZWQ7XG4gICAgdmFyIGdyb3VwZWQgPSBwYXJhbS5ncm91cGVkO1xuICAgIHZhciB2aXNpYmxlID0gcGFyYW0udmlzaWJsZTtcbiAgICB2YXIgdmlzaWJsZWYgPSBwYXJhbS52aXNpYmxlZjtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuYWRkRmlsZShmaWxlTmFtZSxwYXJzZWQsdmlzaWJsZSxncm91cGVkLCB2aXNpYmxlZik7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVGaWxlID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBmaWxlTmFtZSA9IHBhcmFtLmZpbGVOYW1lO1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5yZW1vdmVGaWxlKGZpbGVOYW1lKTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZUFsbCA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkucmVtb3ZlQWxsKCk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXN0b3JlQWxsID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBwYXJzZWQgPSBwYXJhbS5wYXJzZWQ7XG4gICAgdmFyIGdyb3VwZWQgPSBwYXJhbS5ncm91cGVkO1xuICAgIHZhciB2aXNpYmxlID0gcGFyYW0udmlzaWJsZTtcbiAgICB2YXIgdmlzaWJsZWYgPSBwYXJhbS52aXNpYmxlZjtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkucmVzdG9yZUFsbChwYXJzZWQsdmlzaWJsZSxncm91cGVkLHZpc2libGVmKVxuICB9XG4gIFxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRDb21wb3VuZFBhZGRpbmcgPSBmdW5jdGlvbihuZXdQYWRkaW5nKSB7XG4gICAgdmFyIHJlc3VsdCA9IG1haW5VdGlsaXRpZXMuZ2V0Q29tcG91bmRQYWRkaW5nKCk7ICAgXG4gICAgbWFpblV0aWxpdGllcy5zZXRDb21wb3VuZFBhZGRpbmcobmV3UGFkZGluZyk7ICAgXG4gICAgXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTsgXG5cbiAgcmV0dXJuIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zO1xufTtcbiIsIi8qXG4qIExvb2t1cCBvYmplY3QgZm9yIHZhbGlkIG1hcCBwcm9wZXJ0aWVzLlxuKiBJbiB0aGUgZnV0dXJlIGl0IGNvdWxkIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIgc2ltaWxhciBwcm9wZXJ0aWVzL2Z1bmN0aW9ucyBpbiBhIG5ldyBmaWxlLlxuKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjb21wb3VuZFBhZGRpbmc6IHRydWUsXG4gIGV4dHJhQ29tcGFydG1lbnRQYWRkaW5nOiB0cnVlLFxuICBleHRyYUNvbXBsZXhQYWRkaW5nOiB0cnVlLFxuICBhcnJvd1NjYWxlOiB0cnVlLFxuICBzaG93Q29tcGxleE5hbWU6IHRydWUsXG4gIGR5bmFtaWNMYWJlbFNpemU6IHRydWUsXG4gIGluZmVyTmVzdGluZ09uTG9hZDogdHJ1ZSxcbiAgZml0TGFiZWxzVG9Ob2RlczogdHJ1ZSxcbiAgZml0TGFiZWxzVG9JbmZvYm94ZXM6IHRydWUsXG4gIHJlY2FsY3VsYXRlTGF5b3V0T25Db21wbGV4aXR5TWFuYWdlbWVudDogdHJ1ZSxcbiAgcmVhcnJhbmdlT25Db21wbGV4aXR5TWFuYWdlbWVudDogdHJ1ZSxcbiAgYW5pbWF0ZU9uRHJhd2luZ0NoYW5nZXM6IHRydWUsXG4gIGFkanVzdE5vZGVMYWJlbEZvbnRTaXplQXV0b21hdGljYWxseTogdHJ1ZSxcbiAgZW5hYmxlUG9ydHM6IHRydWUsXG4gIGFsbG93Q29tcG91bmROb2RlUmVzaXplOiB0cnVlLFxuICBtYXBDb2xvclNjaGVtZTogdHJ1ZSxcbiAgbWFwQ29sb3JTY2hlbWVTdHlsZTogdHJ1ZSxcbiAgbWFwTmFtZTogdHJ1ZSxcbiAgbWFwRGVzY3JpcHRpb246IHRydWUsXG4gIGVuYWJsZVNJRlRvcG9sb2d5R3JvdXBpbmc6IHRydWUsXG4gIGV4cGVyaW1lbnREZXNjcmlwdGlvbjogdHJ1ZVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImNvbnNvbGUtYnJvd3NlcmlmeVwiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwibGlic2Jnbi5qc1wiKTs7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicHJldHR5LWRhdGFcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInhtbDJqc1wiKTs7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2luZGV4LmpzXCIpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zYmdudml6L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL2luZGV4LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvc2Jnbi1leHRlbnNpb25zL3NiZ24tY3ktaW5zdGFuY2UtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3NiZ24tZXh0ZW5zaW9ucy9zYmduLWN5LXJlbmRlcmVyLmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2NkLXRvLXNiZ25tbC1jb252ZXJ0ZXItZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9jbGFzc2VzLmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2VsZW1lbnQtdXRpbGl0aWVzLWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vc2JnbnZpei8uL3NyYy91dGlsaXRpZXMvZXhwZXJpbWVudGFsLWRhdGEtb3ZlcmxheS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9maWxlLXV0aWxpdGllcy1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2dyYXBoLXV0aWxpdGllcy1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2pzb24tdG8tbnd0LWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2pzb24tdG8tc2Jnbm1sLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2pzb24tdG8tc2lmLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2tleWJvYXJkLWlucHV0LXV0aWxpdGllcy1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2xheW91dC1sb2FkZXItZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9sYXlvdXQtdG8tdGV4dC1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMuanMiLCJ3ZWJwYWNrOi8vc2JnbnZpei8uL3NyYy91dGlsaXRpZXMvbWFpbi11dGlsaXRpZXMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9ud3QtdG8tanNvbi1jb252ZXJ0ZXItZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy9vcHRpb24tdXRpbGl0aWVzLWZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vc2JnbnZpei8uL3NyYy91dGlsaXRpZXMvc2Jnbm1sLXRvLWNkLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3NiZ25tbC10by1qc29uLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3NiZ25tbC10by1zYm1sLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3NibWwtdG8tc2Jnbm1sLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3NpZi10by1qc29uLWNvbnZlcnRlci1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3RhYi1kZWxpbWV0ZWQtcGFyc2VyLmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3RhYi1kZWxpbWl0ZWQtdG8tanNvbi1jb252ZXJ0ZXItZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy90ZXh0LXV0aWxpdGllcy5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy91aS11dGlsaXRpZXMtZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly9zYmdudml6Ly4vc3JjL3V0aWxpdGllcy91bmRvLXJlZG8tYWN0aW9uLWZ1bmN0aW9ucy1mYWN0b3J5LmpzIiwid2VicGFjazovL3NiZ252aXovLi9zcmMvdXRpbGl0aWVzL3ZhbGlkTWFwUHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9zYmdudml6L2V4dGVybmFsIFwiY29uc29sZS1icm93c2VyaWZ5XCIiLCJ3ZWJwYWNrOi8vc2JnbnZpei9leHRlcm5hbCBcImxpYnNiZ24uanNcIiIsIndlYnBhY2s6Ly9zYmdudml6L2V4dGVybmFsIFwicHJldHR5LWRhdGFcIiIsIndlYnBhY2s6Ly9zYmdudml6L2V4dGVybmFsIFwieG1sMmpzXCIiLCJ3ZWJwYWNrOi8vc2JnbnZpei93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9zYmdudml6L3dlYnBhY2svc3RhcnR1cCJdLCJuYW1lcyI6WyJzYmdudml6IiwiX29wdGlvbnMiLCJwYXJhbSIsIm9wdGlvblV0aWxpdGllcyIsInJlcXVpcmUiLCJvcHRpb25zIiwiZXh0ZW5kT3B0aW9ucyIsInNiZ25DeUluc3RhbmNlIiwidWlVdGlsaXRpZXMiLCJmaWxlVXRpbGl0aWVzIiwiZ3JhcGhVdGlsaXRpZXMiLCJtYWluVXRpbGl0aWVzIiwia2V5Ym9hcmRJbnB1dFV0aWxpdGllcyIsImV4cGVyaW1lbnRhbERhdGFPdmVybGF5IiwiZWxlbWVudFV0aWxpdGllcyIsInVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zIiwianNvblRvU2Jnbm1sQ29udmVydGVyIiwianNvblRvTnd0Q29udmVydGVyIiwic2Jnbm1sVG9Kc29uQ29udmVydGVyIiwibnd0VG9Kc29uQ29udmVydGVyIiwidGRUb0pzb25Db252ZXJ0ZXIiLCJzaWZUb0pzb25Db252ZXJ0ZXIiLCJqc29uVG9TaWZDb252ZXJ0ZXIiLCJjbGFzc2VzIiwidGRQYXJzZXIiLCJsYXlvdXRMb2FkZXIiLCJsYXlvdXRUb1RleHQiLCJjZFRvU2Jnbm1sQ29udmVydGVyIiwic2Jnbm1sVG9DZENvbnZlcnRlciIsInNiZ25tbFRvU2JtbENvbnZlcnRlciIsInNibWxUb1NiZ25tbENvbnZlcnRlciIsImdldEN5Iiwic2NyYXRjaCIsInNiZ252aXpQYXJhbXMiLCJhcGkiLCJwcm9wIiwidmFsaWRNYXBQcm9wZXJ0aWVzIiwicmVnaXN0ZXIiLCJfbGlicyIsImxpYnMiLCJqUXVlcnkiLCJjeXRvc2NhcGUiLCJzYXZlQXMiLCJmaWxlc2F2ZXIiLCJ0aXBweSIsIlRpcHB5IiwibGliVXRpbGl0aWVzIiwic2V0TGlicyIsInNiZ25SZW5kZXJlciIsIm1vZHVsZSIsImV4cG9ydHMiLCIkIiwicmVmcmVzaFBhZGRpbmdzIiwiY3kiLCJiaW5kIiwiZ2V0T3B0aW9ucyIsImdldFBvaW50T25DaXJjbGUiLCJjZW50ZXJYIiwiY2VudGVyWSIsInJhZGl1cyIsImFuZ2xlSW5EZWdyZWUiLCJhbmdsZUluUmFkaWFuIiwiTWF0aCIsIlBJIiwieCIsImNvcyIsInkiLCJzaW4iLCJnZW5lcmF0ZUNpcmNsZVN0cmluZyIsImFuZ2xlRnJvbSIsImFuZ2xlVG8iLCJudW1PZlBvaW50cyIsImNpcmNsZVN0ciIsInN0ZXBTaXplIiwiY3VycmVudEFuZ2xlIiwiaSIsInBvaW50IiwiZ2VuZXJhdGVTaGFwZVdpdGhQb3J0U3RyaW5nIiwibGluZUhXIiwic2hhcGVIVyIsInR5cGUiLCJvcmllbnRhdGlvbiIsInBvbHlnb25TdHIiLCJhYm92ZVBvaW50cyIsImJlbG93UG9pbnRzIiwibGVmdFBvaW50cyIsInJpZ2h0UG9pbnRzIiwicmVnaXN0ZXJVbmRvUmVkb0FjdGlvbnMiLCJ1ciIsInVuZG9SZWRvIiwiYWN0aW9uIiwiZGVsZXRlRWxlc1NpbXBsZSIsInJlc3RvcmVFbGVzIiwiZGVsZXRlTm9kZXNTbWFydCIsInNldFBvcnRzT3JkZXJpbmciLCJyZW1vdmVBbGwiLCJyZXN0b3JlQWxsIiwiaGlkZUV4cCIsInVuaGlkZUV4cCIsImhpZGVGaWxlIiwiaGlkZUZpbGVVbmRvIiwidW5oaWRlRmlsZSIsInVuaGlkZUZpbGVVbmRvIiwicmVtb3ZlRXhwIiwiYWRkRXhwIiwicmVtb3ZlRmlsZSIsImFkZEZpbGUiLCJleHBCdXR0b25DaGFuZ2UiLCJmaWxlQnV0dG9uQ2hhbmdlSGlkZSIsImZpbGVCdXR0b25DaGFuZ2VVbkhpZGUiLCJzaG93VG9vbHRpcCIsImV2ZW50Iiwibm9kZSIsInRhcmdldCIsImN5VGFyZ2V0IiwiY2FuSGF2ZVRvb2x0aXAiLCJpc1NJRk5vZGUiLCJkYXRhIiwicmVmIiwicG9zIiwicG9zaXRpb24iLCJjeVBvc2l0aW9uIiwicGFuIiwiem9vbSIsImluZm9ib3giLCJBdXhpbGlhcnlVbml0IiwiY2hlY2tQb2ludCIsInRvb2x0aXBDb250ZW50IiwidW5kZWZpbmVkIiwicG9wcGVyUmVmIiwibW9kZWxQb3MiLCJnZXRBYnNvbHV0ZUNvb3JkIiwibW9kZWxXIiwiYmJveCIsInciLCJtb2RlbEgiLCJoIiwicmVuZGVyZWRXIiwicmVuZGVyZWRIIiwicmVuZGVyZWRQb3MiLCJjb252ZXJ0VG9SZW5kZXJlZFBvc2l0aW9uIiwicmVuZGVyZWREaW1zIiwicmVuZGVyZWRQb3NpdGlvbiIsInJlbmRlcmVkRGltZW5zaW9ucyIsInBsYWNlbWVudCIsImFuY2hvclNpZGUiLCJkZXN0cm95VGlwcHkiLCJvbmUiLCJjb250ZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJpbm5lckhUTUwiLCJ0cmlnZ2VyIiwiaGlkZU9uQ2xpY2siLCJhcnJvdyIsIm9uSGlkZGVuIiwib2ZmIiwiZGVzdHJveSIsIm9uIiwic2V0VGltZW91dCIsInNob3ciLCJiaW5kQ3lFdmVudHMiLCJ3YWl0RHVyYXRpb24iLCJub2RlVGFwZHJhZ291dCIsImN1cnJFdmVudCIsImluUXVldWUiLCJjbGVhck5vZGVFdmVudCIsIm5vZGVUYXBkcmFnIiwiZ2V0U2hvd1Rvb2x0aXBBc3ljbiIsInNob3dUb29sdGlwQXN5Y24iLCJlIiwiY2xlYXJUaW1lb3V0IiwidXBkYXRlIiwiX3ByaXZhdGUiLCJzdGFydHNXaXRoIiwiaW5mb0xhYmVsIiwiZ2V0SW5mb0xhYmVsIiwic3RhcnRCYXRjaCIsImVuZEJhdGNoIiwicmVtb3ZlRGF0YSIsIm5vZGVzIiwidXBkYXRlQ29tcG91bmRCb3VuZHMiLCJyZWNhbGN1bGF0ZU9uQ29tcGxleGl0eU1hbmFnZW1lbnQiLCJyZW1vdmVTdHlsZSIsIm5hbWUiLCJhcmdzIiwicGFyZW50cyIsImVsZW1lbnRzIiwianNvbnMiLCJzaW1wbGVzIiwibm90IiwiYWxsRWxlbWVudHMiLCJjb25jYXQiLCJwb3J0cyIsImZvckVhY2giLCJjYW5IYXZlUG9ydHMiLCJpZCIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsInZpZXdwb3J0IiwiYmVmb3JlUGVyZm9ybUxheW91dCIsImFsbEVsZW1lbnRzMiIsInBvcnRzMiIsInZpZXdwb3J0MiIsInJlcyIsImpzb24iLCJmbGF0RWxlcyIsImJhdGNoIiwibGF5b3V0IiwicG9ydHNFbmFibGVkIiwiY2hhbmdlUG9ydHNPcmllbnRhdGlvbkFmdGVyTGF5b3V0IiwiX2N5IiwiaXNMYXlvdXRSZXF1aXJlZCIsImNhbGxiYWNrIiwic2V0Q29tcG91bmRJbmZvYm94ZXMiLCJjeUluc3RhbmNlIiwiaW5mb2JveENhbGN1bGF0ZWQiLCJpc1BhcmVudCIsImNoaWxkcmVuIiwiY2hpbGROb2RlIiwiY29ycmVjdEluZm9Cb3hDb29yZCIsImxlbmd0aCIsInN0YXRlc2FuZGluZm9zIiwiaW5mb0JveE9uTm9kZSIsInNldEFuY2hvclNpZGUiLCJzdGF0ZXNUb0FkZCIsImNvcmRSZXN1bHQiLCJjb252ZXJ0VG9SZWxhdGl2ZUNvb3JkIiwiaXNEaXNwbGF5ZWQiLCJsb2NhdGlvbiIsImxheW91dHMiLCJBdXhVbml0TGF5b3V0IiwiY29uc3RydWN0IiwiYWRkQXV4VW5pdCIsInNlbGVjdE5leHRBdmFpbGFibGUiLCJsb2NhdGlvbnMiLCJjaGVja0ZpdCIsImZpdFVuaXRzIiwic2VsZWN0aW9uQ29sb3IiLCJzYmduU3R5bGVTaGVldCIsInN0eWxlc2hlZXQiLCJzZWxlY3RvciIsImNzcyIsImVsZSIsImdldEN5U2hhcGUiLCJnZXRFbGVtZW50Q29udGVudCIsIm9wdCIsImFkanVzdE5vZGVMYWJlbEZvbnRTaXplQXV0b21hdGljYWxseSIsImFkanVzdCIsImdldExhYmVsVGV4dFNpemUiLCJmaXRMYWJlbHNUb05vZGVzIiwiaXNGaXQiLCJ3aWR0aCIsInBvcnQiLCJhYnMiLCJfY2xhc3MiLCJlbmRzV2l0aCIsImdldENvbXBsZXhNYXJnaW4iLCJnZXRDb21wbGV4UGFkZGluZyIsImV4dHJhQ29tcGFydG1lbnRQYWRkaW5nIiwiZ2V0Q29tcG91bmRQYWRkaW5ncyIsImNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkIiwibWluIiwicGFyc2VGbG9hdCIsIm1heCIsImdldEN5VGFyZ2V0QXJyb3dGaWxsIiwic2VsZWN0ZWQiLCJnZXRDeUFycm93U2hhcGUiLCJnZXRFbmRQb2ludCIsImdldEFycmF5TGluZVN0eWxlIiwic2Jnbk5ldHdvcmtDb250YWluZXIiLCJuZXR3b3JrQ29udGFpbmVyU2VsZWN0b3IiLCJjb250YWluZXIiLCJzaG93T3ZlcmxheSIsIm1pblpvb20iLCJtYXhab29tIiwiYm94U2VsZWN0aW9uRW5hYmxlZCIsIm1vdGlvbkJsdXIiLCJ3aGVlbFNlbnNpdGl2aXR5IiwicmVhZHkiLCJ1bmRvYWJsZSIsImN5TWF0aCIsIm1hdGgiLCJjeUJhc2VOb2RlU2hhcGVzIiwiYmFzZU5vZGVTaGFwZXMiLCJjeVN0eWxlUHJvcGVydGllcyIsInN0eWxlUHJvcGVydGllcyIsIiQkIiwic2JnbiIsImRyYXdCb3JkZXIiLCJjb250ZXh0IiwiYm9yZGVyV2lkdGgiLCJib3JkZXJDb2xvciIsImJvcmRlclN0eWxlIiwiYm9yZGVyT3BhY2l0eSIsInBhcmVudE9wYWNpdHkiLCJlZmZlY3RpdmVPcGFjaXR5IiwicHJvcHNUb1Jlc3RvcmUiLCJpbml0aWFsUHJvcHMiLCJwcm9wTmFtZSIsImxpbmVXaWR0aCIsImxpbmVDYXAiLCJzdHJva2VTdHlsZSIsImdsb2JhbEFscGhhIiwic2V0TGluZURhc2giLCJzdHJva2UiLCJnY28iLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJkcmF3Um91bmRSZWN0YW5nbGVQYXRoIiwiaGVpZ2h0IiwiaGFsZldpZHRoIiwiaGFsZkhlaWdodCIsImNvcm5lclJhZGl1cyIsImdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzIiwiYmVnaW5QYXRoIiwibW92ZVRvIiwiYXJjVG8iLCJsaW5lVG8iLCJjbG9zZVBhdGgiLCJkcmF3UG9seWdvblBhdGgiLCJwb2ludHMiLCJoYWxmVyIsImhhbGZIIiwic2JnblNoYXBlcyIsInRvdGFsbHlPdmVycmlkZW5Ob2RlU2hhcGVzIiwiY2FuSGF2ZUluZm9Cb3hTaGFwZXMiLCJjYW5CZU11bHRpbWVyU2hhcGVzIiwiY2FsY3VsYXRlRGlzdGFuY2UiLCJwb2ludDEiLCJwb2ludDIiLCJkaXN0YW5jZSIsInBvdyIsInNxcnQiLCJjb2xvcnMiLCJjbG9uZSIsImdldERlZmF1bHRDb21wbGV4Q29ybmVyTGVuZ3RoIiwiZHJhd1N0YXRlQW5kSW5mb3MiLCJzaWRlIiwiZHJhdyIsImRyYXdJbmZvQm94Iiwic2hhcGVOYW1lIiwiZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlIiwiZHJhd0NvbXBsZXgiLCJnZW5lcmF0ZVBlcnR1cmJpbmdBZ2VudFBvaW50cyIsIm51Y2xlaWNBY2lkQ2hlY2tQb2ludCIsInBhZGRpbmciLCJwb2ludEluc2lkZVBvbHlnb24iLCJjaGVja0luRWxsaXBzZSIsImZvcmNlT3BhY2l0eVRvT25lIiwiZmlsbFN0eWxlIiwidmFsdWUiLCJkcmF3U2ltcGxlQ2hlbWljYWxQYXRoIiwiZHJhd1NpbXBsZUNoZW1pY2FsIiwiZmlsbCIsInNpbXBsZUNoZW1pY2FsTGVmdENsb25lIiwiY2xvbmVNYXJrZXIiLCJvcGFjaXR5Iiwib2xkR2xvYmFsQWxwaGEiLCJvbGRTdHlsZSIsIm1hcmtlckJlZ2luWCIsIm1hcmtlckJlZ2luWSIsIm1hcmtlckVuZFgiLCJtYXJrZXJFbmRZIiwiYXJjIiwic2ltcGxlQ2hlbWljYWxSaWdodENsb25lIiwiZHJhd0VsbGlwc2VQYXRoIiwiZHJhd1BhdGgiLCJkcmF3QmFycmVsIiwiZHJhd051Y0FjaWRGZWF0dXJlMiIsImxlZnQiLCJyaWdodCIsImJvdHRvbSIsInRvcCIsInN0ciIsInBhdHRlcm4iLCJsIiwiY2hhckF0IiwiaXNNdWx0aW1lciIsInNiZ25DbGFzcyIsImdlbmVyYXRlQ29tcGxleFNoYXBlUG9pbnRzIiwiY29ybmVyTGVuZ3RoIiwiY3BYIiwiY3BZIiwiY29tcGxleFBvaW50cyIsImdldERlZmF1bHRNdWx0aW1lclBhZGRpbmciLCJkcmF3SW1hZ2UiLCJpbWdPYmoiLCJjbGlwIiwiaW1nIiwiaW1nVyIsImltZ0giLCJyZXN0b3JlIiwidHlwZXMiLCJub2RlU2hhcGUiLCJlbnVtcyIsInB1c2giLCJyZWdpc3RlclNiZ25Ob2RlU2hhcGVzIiwiZ2VuZXJhdGVEcmF3RmNuIiwicGxhaW5EcmF3RmNuIiwiZXh0cmFEcmF3RmNuIiwiY2FuQmVNdWx0aW1lciIsImNsb25lTWFya2VyRmNuIiwiY2FuSGF2ZUluZm9Cb3giLCJtdWx0aW1lclBhZGRpbmciLCJvdXRlcldpZHRoIiwib3V0ZXJIZWlnaHQiLCJiZ09wYWNpdHkiLCJpc0Nsb25lZCIsImNsb25lbWFya2VyIiwiZ2VuZXJhdGVJbnRlcnNlY3RMaW5lRmNuIiwicGxhaW5JbnRlcnNlY3RMaW5lRmNuIiwiaW50ZXJzZWN0aW9ucyIsInN0YXRlQW5kSW5mb0ludGVyc2VjdExpbmVzIiwiaW50ZXJzZWN0TGluZVN0YXRlQW5kSW5mb0JveGVzIiwibm9kZUludGVyc2VjdExpbmVzIiwibXVsdGltZXJJbnRlcnNlY3Rpb25MaW5lcyIsImNsb3Nlc3RJbnRlcnNlY3Rpb25Qb2ludCIsImdlbmVyYXRlQ2hlY2tQb2ludEZjbiIsInBsYWluQ2hlY2tQb2ludEZjbiIsInRocmVzaG9sZCIsIm5vZGVDaGVjayIsInN0YXRlQW5kSW5mb0NoZWNrIiwiY2hlY2tQb2ludFN0YXRlQW5kSW5mb0JveGVzIiwibXVsdGltZXJDaGVjayIsInNoYXBlTmFtZXMiLCJwbGFpbkRyYXciLCJwbGFpbkludGVyc2VjdExpbmUiLCJwbGFpbkNoZWNrUG9pbnQiLCJleHRyYURyYXciLCJpbnRlcnNlY3RMaW5lIiwic2hhcGUiLCJkcmF3RWxsaXBzZSIsImRyYXdDcm9zc0xpbmUiLCJnZW5lcmF0ZVVuaXROZ29uUG9pbnRzIiwic2NhbGVYIiwic2NhbGVZIiwiZHJhd0Jpb2xvZ2ljYWxBY3Rpdml0eSIsImdlbmVyYXRlQmlvbG9naWNhbEFjdGl2aXR5UG9pbnRzIiwiZHJhd1JvdW5kUmVjdGFuZ2xlIiwiZ2VuZXJhdGVOdWNsZWljQWNpZFBvaW50cyIsImdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSIsImdlbmVyYXRlQ29tcGFydG1lbnRQb2ludHMiLCJyb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUiLCJwb2x5Z29uSW50ZXJzZWN0TGluZSIsImRpYW0iLCJmaXJzdENpcmNsZUNlbnRlclgiLCJmaXJzdENpcmNsZUNlbnRlclkiLCJzZWNvbmRDaXJjbGVDZW50ZXJYIiwic2Vjb25kQ2lyY2xlQ2VudGVyWSIsImJvdHRvbUNpcmNsZUNlbnRlclgiLCJib3R0b21DaXJjbGVDZW50ZXJZIiwicmVjUG9pbnRzIiwiY2xvbmVYIiwiY2xvbmVZIiwiY2xvbmVXaWR0aCIsImNsb25lSGVpZ2h0IiwibWFya2VyUG9pbnRzIiwiY2xvc2VzdEludGVyc2VjdGlvbiIsIm1pbkRpc3RhbmNlIiwiTnVtYmVyIiwiTUFYX1ZBTFVFIiwibnVjbGVpY0FjaWRJbnRlcnNlY3Rpb25MaW5lIiwibm9kZVgiLCJub2RlWSIsInN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMiLCJ0b3BTdGFydFgiLCJ0b3BTdGFydFkiLCJ0b3BFbmRYIiwidG9wRW5kWSIsImZpbml0ZUxpbmVzSW50ZXJzZWN0IiwicmlnaHRTdGFydFgiLCJyaWdodFN0YXJ0WSIsInJpZ2h0RW5kWCIsInJpZ2h0RW5kWSIsImJvdHRvbVN0YXJ0WCIsImJvdHRvbVN0YXJ0WSIsImJvdHRvbUVuZFgiLCJib3R0b21FbmRZIiwibGVmdFN0YXJ0WCIsImxlZnRTdGFydFkiLCJsZWZ0RW5kWCIsImxlZnRFbmRZIiwiYXJjSW50ZXJzZWN0aW9ucyIsImJvdHRvbVJpZ2h0Q2VudGVyWCIsImJvdHRvbVJpZ2h0Q2VudGVyWSIsImludGVyc2VjdExpbmVDaXJjbGUiLCJib3R0b21MZWZ0Q2VudGVyWCIsImJvdHRvbUxlZnRDZW50ZXJZIiwicGVydHVyYmluZ0FnZW50SW50ZXJzZWN0TGluZSIsIngxIiwieTEiLCJ4MiIsInkyIiwiaW50ZXJzZWN0aW9uIiwidG9wTGVmdENlbnRlclgiLCJ0b3BMZWZ0Q2VudGVyWSIsInRvcFJpZ2h0Q2VudGVyWCIsInRvcFJpZ2h0Q2VudGVyWSIsImludGVyc2VjdExpbmVFbGxpcHNlIiwiYW4iLCJibiIsImQiLCJtIiwibiIsImEiLCJiIiwiYyIsImRpc2NyaW1pbmFudCIsInQxIiwidDIiLCJ4TWluIiwieE1heCIsInlNaW4iLCJ5TWF4IiwicGFyc2VJbnQiLCJzdGF0ZUFuZEluZm9zIiwic3RhdGUiLCJpbmZvQm94V2lkdGgiLCJpbmZvQm94SGVpZ2h0IiwiY3VyckludGVyc2VjdGlvbnMiLCJjbGF6eiIsImNvb3JkIiwiU3RhdGVWYXJpYWJsZSIsIlVuaXRPZkluZm9ybWF0aW9uIiwiaXNOb2RlU2hhcGVUb3RhbGx5T3ZlcnJpZGVuIiwicmVuZGVyIiwiZ2V0Tm9kZVNoYXBlIiwianNvblRvU2Jnbm1sIiwiY2RUb1NiZ25tbCIsImNvbnZlcnQiLCJ4bWwiLCJhamF4IiwidXJsIiwic3VjY2VzcyIsImVycm9yIiwidHJ1bmNhdGUiLCJucyIsImdldEF1eFVuaXRDbGFzcyIsInVuaXQiLCJ1bml0VHlwZSIsImNsYXNzTmFtZSIsInBhcmVudCIsIm9iaiIsInNldFBhcmVudFJlZiIsImdldFBhcmVudCIsIm1haW5PYmoiLCJnZXRFbGVtZW50QnlJZCIsIm5ld1BhcmVudCIsInN0YXRlV2lkdGgiLCJzdGF0ZUhlaWdodCIsInN0YXRlQ2VudGVyWCIsInN0YXRlQ2VudGVyWSIsImNvcHkiLCJleGlzdGluZ0luc3RhbmNlIiwibmV3SWQiLCJuZXdVbml0IiwicGFyZW50VG9TZXQiLCJleHRlbmQiLCJjb29yZFR5cGUiLCJ1bml0Q2xhc3MiLCJjb29yZHMiLCJkcmF3U2hhcGUiLCJoYXNUZXh0IiwiZHJhd1RleHQiLCJnZXRUZXh0IiwiRXJyb3IiLCJ0bXBfY3R4dCIsImRhc2hlZCIsIm9sZEZvbnQiLCJmb250Iiwib2xkT3BhY2l0eSIsInRleHRBbGlnbiIsInRleHRCYXNlbGluZSIsInRleHQiLCJmaXRMYWJlbHNUb0luZm9ib3hlcyIsImtleSIsIl90ZXh0Q2FjaGUiLCJmaWxsVGV4dCIsInBhcmVudFdpZHRoIiwicGFyZW50SGVpZ2h0IiwicmVwbGFjZSIsImFic1giLCJhYnNZIiwiY29udmVydFRvQWJzb2x1dGVDb29yZCIsInJlbFgiLCJyZWxZIiwicGFyZW50Tm9kZSIsInRoaXNYIiwidGhpc1kiLCJ0aGlzSCIsInRoaXNXIiwiY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nIiwicGFyZW50WCIsInBhcmVudFkiLCJwYXJlbnRYMSIsInRvRml4ZWQiLCJwYXJlbnRYMiIsInBhcmVudFkxIiwicGFyZW50WTIiLCJhZGRUb1BhcmVudCIsImluZGV4Iiwic3BsaWNlIiwiaW5zZXJ0ZWRQb3NpdGlvbiIsInJlbW92ZUZyb21QYXJlbnQiLCJwYXJlbnRMYXlvdXQiLCJyZW1vdmVBdXhVbml0IiwiaXNFbXB0eSIsImluZGV4T2YiLCJnZXRQb3NpdGlvbkluZGV4IiwidW5pdHMiLCJzdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiIsImdlbmVyYXRlU3RhdGVWYXJJZCIsInZhcmlhYmxlIiwic3RhdGVWYWx1ZSIsInN0YXRlVmFyaWFibGUiLCJjcmVhdGUiLCJzdGF0ZVZhciIsInJlbW92ZSIsIm5ld1N0YXRlVmFyIiwiZ2VuZXJhdGVVbml0T2ZJbmZvSWQiLCJsYWJlbCIsIm5ld1VuaXRPZkluZm8iLCJFbnRpdHlUeXBlIiwiRVBOIiwic3RhdGVWYXJpYWJsZURlZmluaXRpb25zIiwiRVBOcyIsImNyZWF0ZU5ld0RlZmluaXRpb25Gb3IiLCJuZXdEZWZpbml0aW9uIiwiU3RhdGVWYXJpYWJsZURlZmluaXRpb24iLCJlbnRpdHlUeXBlIiwic3RhdGVWYXJpYWJsZXMiLCJhc3NpZ25TdGF0ZVZhcmlhYmxlIiwibWF0Y2hTdGF0ZURlZiIsIm1hdGNoU3RhdGVWYXJpYWJsZSIsImdldENvbmNlcm5lZEVQTnMiLCJtYXRjaFN0YXRlVmFyIiwiYWxpZ25tZW50Iiwic2V0UGFyZW50Tm9kZVJlZiIsInJlbmRlckxlbmd0aENhY2hlIiwibGVuZ3RoVXNlZCIsIm91dGVyTWFyZ2luIiwiZ2V0UGFyZW50Tm9kZSIsInVuaXRHYXAiLCJjdXJyZW50VG9wVW5pdEdhcCIsImN1cnJlbnRCb3R0b21Vbml0R2FwIiwiY3VycmVudExlZnRVbml0R2FwIiwiY3VycmVudFJpZ2h0VW5pdEdhcCIsImFsd2F5c1Nob3dBdXhVbml0cyIsIm1heFVuaXREaXNwbGF5ZWQiLCJsYXN0UG9zIiwicHJlQ29tcHV0ZWQiLCJjb21wdXRlQ29vcmRzIiwiZmlsdGVyIiwibG9jIiwic2V0RGlzcGxheWVkVW5pdHMiLCJyZWxhdGl2ZUNvb3JkcyIsImdldEN1cnJlbnRHYXAiLCJsYXN0VW5pdCIsImxhc3RVbml0QWJzQ29yZCIsInJlb3JkZXJGcm9tUG9zaXRpb25zIiwic29ydCIsInVwZGF0ZUxlbmd0aENhY2hlIiwicHJldmlvdXMiLCJnZXRPdXRlck1hcmdpbiIsImN1cnJlbnRMZW5ndGgiLCJpc1RvckIiLCJnZXRVbml0R2FwIiwiZ2V0RHJhd2FibGVVbml0QW1vdW50IiwiZ2V0QWx3YXlzU2hvd0F1eFVuaXRzIiwiYXZhaWxhYmxlU3BhY2UiLCJnZXRNYXhVbml0RGlzcGxheWVkIiwiZ2V0VXNlZFdpZHRoIiwidGIiLCJ0b3RhbFdpZHRoIiwiZ2V0VXNlZEhlaWdodCIsInRvdGFsSGVpZ2h0IiwiZ2V0VXNlZExlbmd0aFRCIiwiZ2V0VXNlZExlbmd0aExSIiwic2V0Q3VycmVudEdhcCIsImZvcmNlQ2hlY2siLCJmaXRMb2NhdGlvbnMiLCJmaXJzdFVuaXQiLCJjb29yZHNGaXJzdCIsImNvb3Jkc0xhc3QiLCJnYXAiLCJmaXJzdFgxIiwibGFzdFgyIiwiZmlyc3RZMSIsImxhc3RZMiIsInNldElkZWFsR2FwIiwiZXN0aW1hdGVkR2FwIiwiYXV4VW5pdCIsInVzZWRMZW5ndGgiLCJyZWxhdGl2ZUNvcmQiLCJwcmVjb21wdXRlQ29vcmRzIiwiZG9Gb3JjZVVwZGF0ZSIsImZpbmFsTGVuZ3RoVXNlZCIsIm1vZGlmeVVuaXRzIiwib2xkTG9jYXRpb24iLCJwb3NYIiwicG9zWSIsIm9sZEF1eFVuaXQiLCJkZWxldGVVbml0cyIsImRlbGV0ZUluZGV4IiwiaW5zZXJ0QXV4VW5pdCIsImluc2VydFVuaXRzIiwidW5pdENvdW50IiwidW5pdExlbmd0aCIsInJpZ2h0TW9zdFBvaW50IiwiYm94IiwiZ2V0Q3VycmVudFRvcEdhcCIsImdldEN1cnJlbnRCb3R0b21HYXAiLCJnZXRDdXJyZW50TGVmdEdhcCIsImdldEN1cnJlbnRSaWdodEdhcCIsInJlc3VsdExvY2F0aW9uIiwicmVzaXplUGFyZW50IiwiaXNMb3JSIiwic2V0UGFyZW50TWluTGVuZ3RoIiwicGFyZW50TGF5b3V0cyIsImNvbXBhcmVWYWwiLCJuZXdMYXlvdXQiLCJ0ZXh0VXRpbGl0aWVzIiwiZ2V0TGlicyIsImluQXJyYXkiLCJhcnIiLCJtYXBUeXBlIiwiZmlsZUZvcm1hdCIsIlBEIiwiQUYiLCJTSUYiLCJncmFwaFRvcG9sb2d5TG9ja2VkIiwiZ2VuZXJhdGVVVUlEIiwiRGF0ZSIsIm5vdyIsInBlcmZvcm1hbmNlIiwiciIsInJhbmRvbSIsImZsb29yIiwidG9TdHJpbmciLCJnZW5lcmF0ZU5vZGVJZCIsImdlbmVyYXRlRWRnZUlkIiwiY29ubmVjdGl2aXR5Q29uc3RyYWludHMiLCJhc1NvdXJjZSIsImlzQWxsb3dlZCIsImFzVGFyZ2V0IiwibWF4RWRnZSIsIm1heFRvdGFsIiwibG9naWNhbE9wZXJhdG9yVHlwZXMiLCJwcm9jZXNzVHlwZXMiLCJiaW9sb2dpY2FsQWN0aXZpdHlUeXBlcyIsImVwblR5cGVzIiwic2lmVHlwZXMiLCJvdGhlck5vZGVUeXBlcyIsIm5vZGVUeXBlcyIsImNvbXBvdW5kTm9kZVR5cGVzIiwic2ltcGxlTm9kZVR5cGVzIiwiZ2V0Iiwic2lmRWRnZVR5cGVzIiwiZWRnZVR5cGVzIiwidW5kaXJlY3RlZEVkZ2VUeXBlcyIsImVsZW1lbnRUeXBlcyIsImdldFNiZ25DbGFzcyIsInNiZ25jbGFzcyIsImdldFB1cmVTYmduQ2xhc3MiLCJpc1ZhbGlkUGFyZW50IiwiX25vZGVDbGFzcyIsIl9wYXJlbnRDbGFzcyIsIm5vZGVDbGFzcyIsInBhcmVudENsYXNzIiwiY29ubmVjdGVkRWRnZXMiLCJpc0VQTkNsYXNzIiwiZ2V0Q29tbW9uUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJkYXRhT3JDc3MiLCJpc0Z1bmN0aW9uIiwiZ2V0VmFsIiwidmFsIiwidHJ1ZUZvckFsbEVsZW1lbnRzIiwiZmNuIiwiY2FuSGF2ZVNCR05DYXJkaW5hbGl0eSIsImNhbkhhdmVTQkdOTGFiZWwiLCJjYW5IYXZlVW5pdE9mSW5mb3JtYXRpb24iLCJjYW5IYXZlTXVsdGlwbGVVbml0T2ZJbmZvcm1hdGlvbiIsImNhbkhhdmVTdGF0ZVZhcmlhYmxlIiwibXVzdEJlU3F1YXJlIiwic29tZU11c3ROb3RCZVNxdWFyZSIsImNhbkJlQ2xvbmVkIiwibGlzdCIsImlzQmlvbG9naWNhbEFjdGl2aXR5IiwiaXNTSUZFZGdlIiwiaXNVbmRpcmVjdGVkRWRnZSIsImlzRGlyZWN0ZWRFZGdlIiwiaXNQTkNsYXNzIiwiaXNFbXB0eVNldENsYXNzIiwiaXNMb2dpY2FsT3BlcmF0b3IiLCJjb252ZW5pZW50VG9FcXVpdmFsZW5jZSIsImlzTW9kdWxhdGlvbkFyY0NsYXNzIiwiaXNBRkFyY0NsYXNzIiwiZ2V0VG9wTW9zdE5vZGVzIiwibm9kZXNNYXAiLCJyb290cyIsImFsbEhhdmVUaGVTYW1lUGFyZW50IiwibW92ZU5vZGVzIiwicG9zaXRpb25EaWZmIiwibm90Q2FsY1RvcE1vc3ROb2RlcyIsInRvcE1vc3ROb2RlcyIsIm9sZFgiLCJvbGRZIiwiY29udmVydFRvTW9kZWxQb3NpdGlvbiIsImRpbSIsImdldFByb2Nlc3Nlc09mU2VsZWN0ZWQiLCJzZWxlY3RlZEVsZXMiLCJleHRlbmROb2RlTGlzdCIsImdldE5laWdoYm91cnNPZlNlbGVjdGVkIiwiZWxlc1RvSGlnaGxpZ2h0IiwiZ2V0TmVpZ2hib3Vyc09mTm9kZXMiLCJfbm9kZXMiLCJhZGQiLCJkZXNjZW5kYW50cyIsIm5laWdoYm9yaG9vZEVsZXMiLCJuZWlnaGJvcmhvb2QiLCJlbGVzVG9SZXR1cm4iLCJub2Rlc1RvU2hvdyIsInNlbGYiLCJleHRlbmROb2RlVHlwZXMiLCJwcm9jZXNzZXMiLCJub25Qcm9jZXNzZXMiLCJuZWlnaGJvclByb2Nlc3NlcyIsInVuaW9uIiwibmVpZ2hib3JOb25Qcm9jZXNzZXMiLCJleHRlbmRSZW1haW5pbmdOb2RlcyIsIm5vZGVzVG9GaWx0ZXIiLCJhbGxOb2RlcyIsImdldFByb2Nlc3Nlc09mTm9kZXMiLCJub25lSXNOb3RIaWdobGlnaHRlZCIsInZpZXdVdGlsaXRpZXMiLCJoaWdobGlnaHRDbGFzc2VzIiwiZ2V0QWxsSGlnaGxpZ2h0Q2xhc3NlcyIsImlzIiwidW5zZWxlY3QiLCJub2Rlc1RvS2VlcCIsIm5vZGVzTm90VG9LZWVwIiwiZWxlcyIsInNob3dDb21wbGV4TmFtZSIsInRleHRXaWR0aCIsInRleHRQcm9wIiwiY29lZmYiLCJyYXRpbyIsImdldER5bmFtaWNMYWJlbFRleHRTaXplIiwiZ2V0U3RhdGVWYXJTaGFwZU9wdGlvbnMiLCJnZXRVbml0T2ZJbmZvU2hhcGVPcHRpb25zIiwib3B0cyIsImdldENhcmRpbmFsaXR5RGlzdGFuY2UiLCJzcmNQb3MiLCJzb3VyY2UiLCJ0Z3RQb3MiLCJjb2xsYXBzZWRDaGlsZHJlbiIsImNoaWxkIiwiY2hpbGRJbmZvIiwiZ2V0UXRpcENvbnRlbnQiLCJjb250ZW50SHRtbCIsInNiZ25zdGF0ZWFuZGluZm8iLCJzdGF0ZUxhYmVsIiwiZ2V0RHluYW1pY0xhYmVsU2l6ZUNvZWZmaWNpZW50IiwiZHluYW1pY0xhYmVsU2l6ZSIsIm1hcCIsImR5bmFtaWNMYWJlbFNpemVDb2VmZmljaWVudCIsImlzTm9kZSIsImNhbGwiLCJ0ZXh0SGVpZ2h0IiwiZWRnZSIsInNvdXJjZU9yVGFyZ2V0IiwicG9ydElkIiwiZW5kTm9kZSIsInNpZ24iLCJnZXRQb3J0c09yZGVyaW5nIiwiaXNQb3J0VGFyZ2V0T2ZBbnlFZGdlIiwiZWRnZXMiLCJwb3J0c29yZGVyaW5nIiwibGVmdFBvcnRJZCIsInRvcFBvcnRJZCIsIm9yZGVyaW5nIiwicG9ydERpc3RhbmNlIiwiaXNQb3J0U291cmNlT2ZBbnlFZGdlIiwiY3VycmVudE9yZGVyaW5nIiwicmVtb3ZlUG9ydHMiLCJhZGRQb3J0cyIsImRpc3QiLCJwb3J0c291cmNlIiwicG9ydHRhcmdldCIsImZpcnN0UG9ydElkIiwic2Vjb25kUG9ydElkIiwiZmlyc3RQb3J0Iiwic2Vjb25kUG9ydCIsImZyb21Mb3JUIiwiZWRnZUNsYXNzIiwibm9kZUlkIiwiYmVzdE9yaWVudGF0aW9uIiwiY2hhbmdlUG9ydHNPcmllbnRhdGlvbiIsImltcHJvdmVGbG93IiwicG9zdENoYW5nZVBvcnRzT3JpZW50YXRpb24iLCJwcm9jZXNzSWQiLCJ0YXJnZXRpbmdFZGdlcyIsInNvdXJjaW5nRWRnZXMiLCJzaW1wbGUiLCJjYWxjdWxhdGVPcmllbnRhdGlvblNjb3JlIiwiYmVzdFNjb3JlIiwicHJvcGVydHkiLCJvdGhlciIsImZpcnN0T3JpZW50YXRpb24iLCJvcHBvc2l0ZU9yaWVudGF0aW9uIiwic2NvcmUiLCJub2RlV2lkdGhPckhlaWdodCIsImlucHV0UG9ydCIsIm91dHB1dFBvcnQiLCJub3RDb25uZWN0ZWRUb1BvcnQiLCJhZGRTaW1wbGVOb2RlVG9BcnJheSIsIm1pbkxlbmd0aCIsImlucHV0UG9ydEVsZSIsInBvcCIsIm91dHB1dFBvcnRFbGUiLCJmaXJzdE5vZGUiLCJzZWNvbmROb2RlIiwic3dhcEVsZW1lbnRzIiwiZWZmZWN0b3IiLCJmaXJzdE91dHB1dCIsImZpcnN0T3V0cHV0U2NvcmUiLCJjaGVja05lZ2F0aXZlT3JpZW50YXRpb25TY29yZSIsImZpcnN0SW5wdXQiLCJmaXJzdElucHV0U2NvcmUiLCJhcnJheSIsImNvbm5lY3RlZFRvIiwibm9kZVNjb3JlIiwibm9kZVdpZHRoIiwibm9kZUhlaWdodCIsImZpcnN0RWxlIiwic2Vjb25kRWxlIiwidGVtcHgiLCJ0ZW1weSIsImV4dHJhQ29tcGxleFBhZGRpbmciLCJtYXJnaW4iLCJzZXRDbG9uZU1hcmtlclN0YXR1cyIsInN0YXR1cyIsImJnT2JqIiwiaW1ncyIsInNwbGl0IiwieFBvcyIsInlQb3MiLCJ3aWR0aHMiLCJoZWlnaHRzIiwiZml0cyIsIm9wYWNpdGllcyIsImpvaW4iLCJkZWZhdWx0UHJvcGVydGllcyIsImdldERlZmF1bHROb2RlUHJvcGVydGllcyIsImdldERlZmF1bHRFZGdlUHJvcGVydGllcyIsImdldERlZmF1bHRQcm9jZXNzU2l6ZSIsImdldERlZmF1bHRMb2dpY2FsT3BlcmF0b3JTaXplIiwiZ2V0RGVmYXVsdEJBU2l6ZSIsImRlZmF1bHRTaWZFZGdlQ29sb3JNYXAiLCJkZWZhdWx0U2l6ZU1hcCIsImdldERlZmF1bHRTaXplIiwiZ2V0RGVmYXVsdEZvbnRQcm9wZXJ0aWVzIiwiZ2V0RGVmYXVsdEluZm9ib3hQcm9wZXJ0aWVzIiwiaW5mb2JveFR5cGUiLCJnZXREZWZhdWx0SW5mb2JveEZvbnRTaXplIiwiZ2V0RGVmYXVsdEluZm9ib3hTaGFwZU5hbWUiLCJnZXREZWZhdWx0SW5mb2JveFNpemUiLCJmb250c2l6ZSIsInByb3BzIiwiZ2V0UHJvcCIsImV4dGVuZERhdGFXaXRoQ2xhc3NEZWZhdWx0cyIsInByb3BzVG9Ta2lwIiwiZGVmYXVsdFByb3BzIiwiZ2V0RGVmYXVsdFByb3BlcnRpZXMiLCJPYmplY3QiLCJrZXlzIiwiZXh0ZW5kTm9kZURhdGFXaXRoQ2xhc3NEZWZhdWx0cyIsImV4dGVuZEVkZ2VEYXRhV2l0aENsYXNzRGVmYXVsdHMiLCJnZXREZWZhdWx0SW5mb2JveFN0eWxlIiwiaW5mb2JveFN0eWxlIiwibm9uU3R5bGVQcm9wcyIsInB1cmVDbGFzcyIsInNldERlZmF1bHRQcm9wZXJ0aWVzIiwibG9ja0dyYXBoVG9wb2xvZ3kiLCJleHBhbmRDb2xsYXBzZSIsImRpc2FibGVDdWUiLCJ1bmxvY2tHcmFwaFRvcG9sb2d5IiwiZW5hYmxlQ3VlIiwiaXNHcmFwaFRvcG9sb2d5TG9ja2VkIiwibGFuZ3VhZ2VUb01hcFR5cGUiLCJsYW5nIiwibWFwVHlwZVRvTGFuZ3VhZ2UiLCJnZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5IiwiY29sbGVjdGlvbiIsImNvbGxhcHNlZE5vZGVzIiwiZ2V0Q29sbGFwc2VkQ2hpbGRyZW5SZWN1cnNpdmVseSIsImdldFdpZHRoQnlDb250ZW50IiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwicGFyc2VkRGF0YU1hcCIsInZpc2libGVEYXRhTWFwQnlFeHAiLCJncm91cGVkRGF0YU1hcCIsInZpc2libGVGaWxlcyIsImNvbG9yTWFwIiwiYWxsVmlzIiwiZmlsZURlc2NyaXB0aW9uIiwiZmlsZVRpdGxlIiwiZ2V0TmFtZSIsImZuYW1lIiwiZ2V0RGVzYyIsImZkZXNjIiwiZ2V0R3JvdXBlZERhdGFNYXAiLCJnZXRQYXJzZWREYXRhTWFwIiwiZ2V0VmlzaWJsZURhdGEiLCJoaWRlQWxsIiwiaW52aXNpYmxlRXhwIiwiaW52aXNpYmxlRmlsZSIsImZpbGVOYW1lIiwiaiIsImV4cE5hbWUiLCJzaG93RGF0YSIsInBhcmFtcyIsImhpZGVBbGxVbmRvIiwidW5oaWRlQWxsIiwidmlzaWJsZUV4cCIsInZpc2libGVGaWxlIiwidW5oaWRlQWxsVW5kbyIsInBhcnNlZCIsInZpc2libGUiLCJncm91cGVkIiwidmlzaWJsZWYiLCJpc1Zpc2libGUiLCJ2YWx1ZXMiLCJncm91cEFycmF5IiwiY291bnQiLCJrIiwiaW52aXNpYmxlIiwiY291bnRWaXNpYmxlRGF0YUJ5RXhwIiwiZGF0YUJveENvdW50IiwiZXhwIiwiZ2VuZXJhdGVTVkdGb3JOb2RlIiwidG9vbHRpcCIsInN2Z05hbWVTcGFjZSIsIm5vZGVMYWJlbCIsInJlcVdpZHRoIiwicmVxSGVpZ2h0Iiwib3ZlcmxheVJlY0JveFciLCJvdmVybGF5UmVjQm94SCIsInN2ZyIsImNyZWF0ZUVsZW1lbnROUyIsInNldEF0dHJpYnV0ZSIsIm92ZXJMYXlSZWN0QkJveCIsImZyZXF1ZW5jeURhdGEiLCJtYXhEYXRhQm94Q291bnQiLCJjb3VudGVyIiwiZGF0YVJlY3RhbmdsZUdlbmVyYXRvciIsIm92ZXJsYXlSZWN0IiwiYXBwZW5kQ2hpbGQiLCJpbnRlcnBvbGF0ZUNvbG9yIiwiY29sb3IxIiwiY29sb3IyIiwiZmFjdG9yIiwicmVzdWx0Iiwic2xpY2UiLCJyb3VuZCIsImRlY2lkZUNvbG9yIiwicGVyY2VudCIsInNvcnRlZCIsInByZXYiLCJuZXh0IiwiZyIsInN0ZXBzIiwicGFyZW50U1ZHIiwiY29sb3JTdHJpbmciLCJjb2xvciIsIm5vZGVDb2xsZWN0aW9uIiwiY29sbGFwc2VkQ2hpbGRyZW5Ob3RQYXJlbnQiLCJwYXJlbnRTZXQiLCJTZXQiLCJoYXMiLCJleHBhbmRhYmxlTm9kZXMiLCJkaWZmZXJlbmNlIiwiaW1hZ2VVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJvdXRlckhUTUwiLCJoZXhUb1JnYiIsImhleCIsInN1YnN0cmluZyIsImJpZ2ludCIsImlzSGV4IiwiaXNOYU4iLCJwYXJzZURhdGEiLCJlcnJvckNhbGxiYWNrIiwic2FtcGxlRXhwZXJpbWVudCIsImV4cGVyaW1lbnRzIiwiY29sb3JtIiwiZmlsZUQiLCJmaWxlTiIsImludHJlZ2V4IiwidmVyc2lvbiIsImNsciIsImxpbmVzIiwidXB0byIsIm1ldGFMaW5lcyIsInQiLCJ0cmltIiwiTmFOIiwibWV0YUxpbmVDb2x1bW5zIiwidHJpbW1lZCIsIk1JTl9WQUxVRSIsImxpbmVDb250ZW50IiwiZWxlU3ltYm9sIiwibWF0Y2giLCJjb2xvcnZhbHVlIiwiZ2V0RXhwZXJpbWVudGFsRGF0YSIsImI2NHRvQmxvYiIsImI2NERhdGEiLCJjb250ZW50VHlwZSIsInNsaWNlU2l6ZSIsImJ5dGVDaGFyYWN0ZXJzIiwiYXRvYiIsImJ5dGVBcnJheXMiLCJvZmZzZXQiLCJieXRlTnVtYmVycyIsIkFycmF5IiwiY2hhckNvZGVBdCIsImJ5dGVBcnJheSIsIlVpbnQ4QXJyYXkiLCJibG9iIiwiQmxvYiIsImxvYWRUZXh0RG9jIiwiZnVsbEZpbGVQYXRoIiwid2luZG93IiwiWE1MSHR0cFJlcXVlc3QiLCJ4aHR0cCIsIkFjdGl2ZVhPYmplY3QiLCJvdmVycmlkZU1pbWVUeXBlIiwib3BlbiIsInNlbmQiLCJyZXNwb25zZVRleHQiLCJsb2FkWE1MRG9jIiwicmVzcG9uc2VYTUwiLCJ0ZXh0VG9YbWxPYmplY3QiLCJkb2MiLCJhc3luYyIsImxvYWRYTUwiLCJwYXJzZXIiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJzYmdubWxUb0pzb24iLCJqc29uVG9Od3QiLCJ0ZFRvSnNvbiIsInNpZlRvSnNvbiIsIm53dFRvSnNvbiIsImpzb25Ub1NpZiIsInNiZ25tbFRvQ2QiLCJzYmdubWxUb1NibWwiLCJzYm1sVG9TYmdubWwiLCJ1cGRhdGVHcmFwaCIsInNhdmVBc1BuZyIsImZpbGVuYW1lIiwic2NhbGUiLCJiZyIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwicG5nQ29udGVudCIsInBuZyIsImZ1bGwiLCJiNjRkYXRhIiwic3Vic3RyIiwic2F2ZUFzSnBnIiwicXVhbGl0eSIsImpwZ0NvbnRlbnQiLCJqcGciLCJzYXZlQXNTdmciLCJzdmdDb250ZW50IiwibG9hZFNhbXBsZSIsImZvbGRlcnBhdGgiLCJmaWxlIiwic3RhcnRTcGlubmVyIiwibWF0Y2hSZXN1bHQiLCJyZW5kZXJJbmZvU3RyaW5nIiwicmVuZGVySW5mb1N0cmluZ0NvcHkiLCJyZWdleCIsIm1hdGNoZXMiLCJleGVjIiwiRnJvbUtlYmFiVG9DYW1lbENhc2UiLCJ4bWxPYmplY3QiLCJjb2xsYXBzZU1hcmtlZE5vZGVzIiwiZW5kU3Bpbm5lciIsImxvYWRTSUZGaWxlIiwibGF5b3V0QnkiLCJydW5MYXlvdXQiLCJydW4iLCJmaXQiLCJsb2FkRmlsZSIsImxvYWRUREZpbGUiLCJmdW5jdGlvbk5hbWUiLCJsb2FkU0JHTk1MRmlsZSIsImNhbGxiYWNrMSIsImNhbGxiYWNrMiIsImxvYWROd3RGaWxlIiwidXJsUGFyYW1zIiwibm9kZXNUb0NvbGxhcHNlIiwiY29sbGFwc2UiLCJjb252ZXJ0RmNuIiwiY2FsbGJhY2szIiwiY2FsbGJhY2s0IiwidGV4dFR5cGUiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiaW1hZ2VzRWxlbWVudE1hdGNoIiwiaW1hZ2VzRWxlbWVudCIsImltYWdlc0VsZW1lbnRNYXRjaERpcnR5IiwiY3lHcmFwaCIsImVyciIsImNvbnNvbGUiLCJsb2ciLCJyZWFkQXNUZXh0IiwibG9hZFNCR05NTFRleHQiLCJ0ZXh0RGF0YSIsInRpbGVJbmZvQm94ZXMiLCJzYXZlQXNTYmdubWwiLCJyZW5kZXJJbmZvIiwibWFwUHJvcGVydGllcyIsInNiZ25tbFRleHQiLCJjcmVhdGVTYmdubWwiLCJzYXZlQXNOd3QiLCJjcmVhdGVOd3QiLCJzYXZlQXNDZWxsRGVzaWduZXIiLCJzYmdubWwiLCJjb252ZXJ0U2Jnbm1sVG9DRCIsImxvYWRDZWxsRGVzaWduZXIiLCJzdWNjZXNzQ2FsbGJhY2siLCJjb252ZXJ0Q0RUb1NiZ25tbCIsInNhdmVBc1NibWwiLCJjb252ZXJ0U2JnbiIsImNvbnZlcnRTYmdubWxUb1NibWwiLCJtZXNzYWdlIiwibG9hZFNibWwiLCJjb252ZXJ0U2JtbFRvU2Jnbm1sIiwiZXhwb3J0TGF5b3V0RGF0YSIsImJ5TmFtZSIsImxheW91dFRleHQiLCJzYXZlQXNQbGFpblNpZiIsImNvbnZlcnRTYmdubWxUZXh0VG9Kc29uIiwiY29udmVydFNpZlRleHRUb0pzb24iLCJzaWZUZXh0IiwiY3JlYXRlSnNvbkZyb21TQkdOIiwiY3JlYXRlSnNvbkZyb21TaWYiLCJzYm1sIiwiZGlzYWJsZVBvcnRzIiwiZW5hYmxlUG9ydHMiLCJhcmVQb3J0c0VuYWJsZWQiLCJjb25zaWRlckNvbXBvdW5kU2l6ZXMiLCJvbWl0Q29tcG91bmRTaXplcyIsImFyZUNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkIiwibGF5b3V0T3B0aW9ucyIsInJlc2V0IiwicG9zaXRpb25NYXAiLCJwcmVmZXJlbmNlcyIsImFuaW1hdGUiLCJyYW5kb21pemUiLCJwb3NpdGlvbnMiLCJwZXJmb3JtTGF5b3V0IiwiZWRnZUVkaXRpbmciLCJpbml0QW5jaG9yUG9pbnRzIiwiY2FsY3VsYXRlUGFkZGluZ3MiLCJwYWRkaW5nUGVyY2VudCIsImNvbXBvdW5kUGFkZGluZyIsInRvdGFsIiwibnVtT2ZTaW1wbGVzIiwidGhlTm9kZSIsImNhbGNfcGFkZGluZyIsInJlY2FsY3VsYXRlUGFkZGluZ3MiLCJzZXRUb1N0ciIsInNldCIsInNpZkVkZ2VQcm9wSGFuZGxlck1hcCIsInNpZk5vZGVQcm9wSGFuZGxlck1hcCIsInNpZkluZm9ib3hQcm9wSGFuZGxlck1hcCIsImluZm9ib3hlcyIsImdseXBocyIsImdseXBoIiwiZXh0ZW5kT2JqZWN0c0RhdGEiLCJvYmpzIiwiZmlsdGVyRmNuIiwicHJvcEhhbmRsZXJNYXAiLCJleHRlbmRTdHlsZXNEYXRhIiwidG9FeHRlbmQiLCJleHRlbmRGcm9tIiwic3R5bGVOYW1lcyIsInN0eWxlTWFwIiwiZWwiLCJwcm9wZXJ0aWVzIiwiaWRMaXN0IiwiY3VyclZhbCIsIndhcm4iLCJidWlsZEpzT2JqIiwianNPYmoiLCJhcmNzIiwianNPYmpTdHlsZXMiLCJleHRlbnNpb24iLCJyZW5kZXJJbmZvcm1hdGlvbiIsImxpc3RPZlN0eWxlcyIsImFwcFN0eWxlcyIsInN0eWxlcyIsImJ1aWxkU3RyaW5nIiwibGlic2JnbmpzIiwicmVuZGVyRXh0ZW5zaW9uIiwiYW5ub3QiLCJwa2dWZXJzaW9uIiwicGtnTmFtZSIsInByZXR0eXByaW50IiwieG1sMmpzIiwibWFwUHJvcGVydGllc0J1aWxkZXIiLCJCdWlsZGVyIiwicm9vdE5hbWUiLCJjb21wb3VuZEV4dGVuc2lvbkJ1aWxkZXIiLCJtYXBJRCIsImdldFhNTFZhbGlkSWQiLCJoYXNFeHRlbnNpb24iLCJoYXNSZW5kZXJFeHRlbnNpb24iLCJhbGxDb2xsYXBzZWROb2RlcyIsImFsbENvbGxhcHNlZEVkZ2VzIiwibWFwTGFuZ3VhZ2UiLCJ4bWxIZWFkZXIiLCJ2ZXJzaW9uTm8iLCJTYmduIiwieG1sbnMiLCJNYXAiLCJsYW5ndWFnZSIsIkV4dGVuc2lvbiIsImdldFJlbmRlckV4dGVuc2lvblNiZ25tbCIsInNldEV4dGVuc2lvbiIsImV4cGVyaW1lbnREZXNjcmlwdGlvbiIsImJ1aWxkT2JqZWN0IiwiZ2x5cGhMaXN0IiwiZWFjaCIsImNoaWxkT2ZOb25lIiwiZ2V0R2x5cGhTYmdubWwiLCJhZGRHbHlwaCIsImdldEFyY1NiZ25tbCIsImFkZEFyYyIsImFkZE1hcCIsInhtbFN0cmluZyIsImhlYWRsZXNzIiwicmVuZGVyT3B0cyIsInByZXR0eSIsIkZyb21DYW1lbFRvS2ViYWJDYXNlIiwicmUiLCJ4bWxTdHJpbmdfY29ycmVjdExhYmVsIiwicDEiLCJwMiIsInhtbGJvZHkiLCJSZW5kZXJJbmZvcm1hdGlvbiIsImJhY2tncm91bmRDb2xvciIsImJhY2tncm91bmQiLCJwcm9ncmFtTmFtZSIsInByb2dyYW1WZXJzaW9uIiwibGlzdE9mQ29sb3JEZWZpbml0aW9ucyIsIkxpc3RPZkNvbG9yRGVmaW5pdGlvbnMiLCJjb2xvckRlZmluaXRpb24iLCJDb2xvckRlZmluaXRpb24iLCJhZGRDb2xvckRlZmluaXRpb24iLCJzZXRMaXN0T2ZDb2xvckRlZmluaXRpb25zIiwibGlzdE9mQmFja2dyb3VuZEltYWdlcyIsIkxpc3RPZkJhY2tncm91bmRJbWFnZXMiLCJpbWFnZXMiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJCYWNrZ3JvdW5kSW1hZ2UiLCJhZGRCYWNrZ3JvdW5kSW1hZ2UiLCJzZXRMaXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzIiwiTGlzdE9mU3R5bGVzIiwieG1sU3R5bGUiLCJTdHlsZSIsIlJlbmRlckdyb3VwIiwiZm9udFdlaWdodCIsImZvbnRTdHlsZSIsImZvbnRDb2xvciIsInN0cm9rZVdpZHRoIiwiYmFja2dyb3VuZEZpdCIsImJhY2tncm91bmRQb3NYIiwiYmFja2dyb3VuZFBvc1kiLCJiYWNrZ3JvdW5kV2lkdGgiLCJiYWNrZ3JvdW5kSGVpZ2h0IiwiYmFja2dyb3VuZEltYWdlT3BhY2l0eSIsImJhY2tncm91bmRPcGFjaXR5Iiwic2V0UmVuZGVyR3JvdXAiLCJhZGRTdHlsZSIsInNldExpc3RPZlN0eWxlcyIsImdldEFubm90YXRpb25FeHRlbnNpb24iLCJjeUVsZW1lbnQiLCJhbm5vdGF0aW9ucyIsImFubm90RXh0IiwiQW5ub3RhdGlvbiIsInJkZkVsZW1lbnQiLCJSZGZFbGVtZW50IiwiYW5ub3RJRCIsImN1cnJlbnRBbm5vdCIsInNlbGVjdGVkREIiLCJhbm5vdGF0aW9uVmFsdWUiLCJzZWxlY3RlZFJlbGF0aW9uIiwiYWRkQ3VzdG9tUHJvcGVydHkiLCJhZGRSZXNvdXJjZSIsInNldFJkZkVsZW1lbnQiLCJHbHlwaCIsImNsYXNzXyIsImNvbXBhcnRtZW50UmVmIiwic2V0TGFiZWwiLCJMYWJlbCIsInNldENsb25lIiwiQ2xvbmVUeXBlIiwic2V0QmJveCIsImFkZEdseXBoQmJveCIsImV4dHJhSW5mbyIsIm1pblciLCJtaW5IIiwiV0xCaWFzIiwiV1JCaWFzIiwiSFRCaWFzIiwiSEJCaWFzIiwiYWRkUG9ydCIsIlBvcnQiLCJib3hHbHlwaCIsInN0YXRlc2FuZGluZm9zSWQiLCJhZGRHbHlwaE1lbWJlciIsImFkZFN0YXRlQm94R2x5cGgiLCJhZGRJbmZvQm94R2x5cGgiLCJpc0VtcHR5T2JqZWN0IiwiZ2V0T3JDcmVhdGVFeHRlbnNpb24iLCJnbHlwaE1lbWJlckxpc3QiLCJzYmdudml6RXh0U3RyaW5nIiwiaGFzTmV3dEV4dCIsImhpZGRlbiIsImVsZW1lbnQiLCJhcmNUYXJnZXQiLCJhcmNTb3VyY2UiLCJhcmNJZCIsIkFyYyIsInNldFN0YXJ0IiwiU3RhcnRUeXBlIiwicnNjcmF0Y2giLCJzdGFydFgiLCJzdGFydFkiLCJzZWdwdHMiLCJnZXRBbmNob3JzQXNBcnJheSIsImFuY2hvclgiLCJhbmNob3JZIiwiYWRkTmV4dCIsIk5leHRUeXBlIiwic2V0RW5kIiwiRW5kVHlwZSIsImVuZFgiLCJlbmRZIiwiY2FyZGluYWxpdHkiLCJlZGdlYkJveCIsImJvdW5kaW5nQm94IiwiaW5jbHVkZUxhYmVscyIsImluY2x1ZGVOb2RlcyIsImluY2x1ZGVFZGdlcyIsImluY2x1ZGVPdmVybGF5cyIsIkJib3giLCJhZGRTdGF0ZUFuZEluZm9CYm94IiwiYm94QmJveCIsIm1haW5HbHlwaCIsIlN0YXRlVHlwZSIsInNldFN0YXRlIiwiZW50aXR5TmFtZSIsInNldEVudGl0eSIsImlzQ2hpbGQiLCJpc1ZhbGlkRW5kIiwiY29ubmVjdGVkTm9kZXMiLCJnZXRMYWJlbCIsImlzVmFsaWRMYWJlbCIsInNyY05hbWVzIiwidGd0TmFtZXMiLCJnZXROYW1lcyIsIm5hbWVzIiwicGNJRFNldCIsInNpdGVMb2NTZXQiLCJwY0lEcyIsInNpdGVMb2NhdGlvbnMiLCJzcmNOYW1lIiwidGd0TmFtZSIsImxpbmUiLCJhdHRyIiwiaXNJbnRlZ2VyRmllbGRJbnB1dCIsImlzRmxvYXRGaWVsZElucHV0IiwiaXNOdW1iZXJLZXkiLCJrZXlDb2RlIiwiaXNEb3RLZXkiLCJpc01pbnVzU2lnbktleSIsImlzTGVmdEtleSIsImlzUmlnaHRLZXkiLCJpc0JhY2tzcGFjZUtleSIsImlzVGFiS2V5IiwiaXNFbnRlcktleSIsImlzQ3RybE9yQ29tbWFuZFByZXNzZWQiLCJjdHJsS2V5IiwibWV0YUtleSIsImxvYWQiLCJnZXRMaW5lc0FycmF5IiwicG9zTWFwIiwidGFicyIsImdldFRhYnNBcnJheSIsIm1hdGNoaW5nTm9kZXMiLCJnZXROb2Rlc0J5TmFtZSIsImlkT3JOYW1lIiwicmVtb3ZlQ2xhc3MiLCJleHBhbmROb2RlcyIsIm5vZGVzVG9FeHBhbmQiLCJleHBhbmQiLCJjb2xsYXBzZU5vZGVzIiwiY29sbGFwc2libGVOb2RlcyIsImNvbGxhcHNlQ29tcGxleGVzIiwiY29tcGxleGVzIiwiY29sbGFwc2VSZWN1cnNpdmVseSIsImV4cGFuZENvbXBsZXhlcyIsImV4cGFuZFJlY3Vyc2l2ZWx5IiwiY29sbGFwc2VBbGwiLCJleHBhbmRBbGwiLCJ0aGlja2VuQm9yZGVyIiwiZGVmYXVsdEJvcmRlcldpZHRoIiwidGhpbkJvcmRlciIsImhpZGVFbGVzU2ltcGxlIiwiYWN0aW9ucyIsIm5vZGVzV2l0aEhpZGRlbk5laWdoYm9yIiwiaGlkZSIsImhpZGVOb2Rlc1NtYXJ0Iiwibm9kZXNUb0hpZGUiLCJzaG93Tm9kZXNTbWFydCIsInNob3dFbGVzIiwiaGlkZGVuRWxlcyIsIm5vZGVzVG9UaGluQm9yZGVyIiwibm9kZXNUb1RoaWNrZW5Cb3JkZXIiLCJlZGdlc1dpdGgiLCJzaG93QWxsIiwiZmlyc3RUaW1lIiwiaXNOZWVkMkhpZ2hsaWd0aCIsImVsZXMyaGlnaGxpZ3RoIiwiaGlnaGxpZ2h0Q2xhc3MiLCJoaWdobGlnaHRlZEVsZXMiLCJjb250YWlucyIsImhpZ2hsaWdodFNlbGVjdGVkIiwiX2VsZXMiLCJpZHgiLCJoaWdobGlnaHQiLCJoaWdobGlnaHROZWlnaGJvdXJzIiwic2VhcmNoQnlMYWJlbCIsIm5vZGVzVG9IaWdobGlnaHQiLCJ0b0xvd2VyQ2FzZSIsImhpZ2hsaWdodFByb2Nlc3NlcyIsInJlbW92ZUhpZ2hsaWdodHMiLCJsb2FkTGF5b3V0RGF0YSIsImdldExheW91dFRleHQiLCJub3RVbmRvYWJsZSIsImNvbnZlcnRTYmdubWxUb0pzb24iLCJjb252ZXJ0Tnd0VG9Kc29uIiwic2V0U2hvd0NvbXBsZXhOYW1lIiwiZ2V0TWFwUHJvcGVydGllcyIsIm1hcFByb3BlcnRpZXNUb09iaiIsImRvVmFsaWRhdGlvbiIsInNldENvbXBvdW5kUGFkZGluZyIsIm5ld1BhZGRpbmdWYWx1ZSIsImdldENvbXBvdW5kUGFkZGluZyIsInN0clRvU2V0Iiwic3BsaXRCeSIsIm1lbWJlciIsImdldEZpcnN0QnlUYWdOYW1lIiwidGFnTmFtZSIsImVscyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiaW5mb2JveEdseXBocyIsImluZm9ib3hHbHlwaCIsImV4dGVuZEVsZW1lbnRzRGF0YSIsImVsZXNEYXRhIiwiZ2V0WE1MRWxlQnlJZCIsInhtbEVsZSIsImdldEVsTWFwIiwiZ3JhcGhEYXRhIiwiYXBwbHlFeHRyYVN0eWxlc0RhdGEiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCIsImF0dHJUb1Byb3AiLCJlbE1hcCIsImdldEF0dHJpYnV0ZSIsImF0dHJOYW1lIiwiZ2V0QXJjQnlJZCIsImdldEdseXBoQnlJZCIsImRlZmF1bHRzIiwiaW1nUGF0aCIsImluZmVyTmVzdGluZ09uTG9hZCIsInBhcnNlU3RyaW5nIiwiaGFuZGxlZEVsZW1lbnRzIiwiaW5zZXJ0ZWROb2RlcyIsImNhbGN1bGF0ZWRDb21wb3VuZFBhZGRpbmciLCJnZXRBbGxDb21wYXJ0bWVudHMiLCJjb21wYXJ0bWVudHMiLCJjb21wYXJ0bWVudCIsImMxIiwiYzIiLCJpc0luQm91bmRpbmdCb3giLCJiYm94MSIsImJib3gyIiwiYmJveFByb3AiLCJiYm94Q2FsY3VsYXRlZCIsImNoaWxkTm9kZXMiLCJnbHlwaE1lbWJlcnMiLCJvcmlnaW5hbFciLCJvcmlnaW5hbEgiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1pbldpZHRoQmlhc0xlZnQiLCJtaW5XaWR0aEJpYXNSaWdodCIsIm1pbkhlaWdodEJpYXNCb3R0b20iLCJtaW5IZWlnaHRCaWFzVG9wIiwiY2FsY3VsYXRlRWxlbWVudFBhZGRpbmciLCJtaW5MZWZ0IiwibWF4UmlnaHQiLCJtaW5Ub3AiLCJtYXhCb3R0b20iLCJjaGlsZHJlbkJib3hXIiwiY2hpbGRyZW5CYm94SCIsIm1pbkxlZnRCb3JkZXIiLCJtYXhSaWdodEJvcmRlciIsIm1pblRvcEJvcmRlciIsIm1heEJvdHRvbUJvcmRlciIsImZyb21JbmZvQm94IiwiY2hpbGROb2RlQmJveCIsImNoaWxkUGFkZGluZyIsInN0YXRlQmJveCIsImF2ZXJhZ2VCb3JkZXJXaWR0aFciLCJhdmVyYWdlQm9yZGVyV2lkdGhIIiwiZXh0cmFMZWZ0IiwiZXh0cmFSaWdodCIsImV4dHJhVG9wIiwiZXh0cmFCb3R0b20iLCJzdGF0ZUFuZEluZm9CYm94UHJvcCIsInBhcmVudEJib3giLCJjb21wbGV4UGFkZGluZyIsImhhc1RvcEJvdHRvbUluZm8iLCJzdGF0ZUFuZEluZm8iLCJmaW5kQ2hpbGROb2RlcyIsImNoaWxkVGFnTmFtZSIsIm5vZGVUeXBlIiwiZmluZENoaWxkTm9kZSIsInN0YXRlQW5kSW5mb1Byb3AiLCJzdGF0ZUFuZEluZm9BcnJheSIsImNoaWxkR2x5cGhzIiwiaW5mbyIsImluZm9ib3hJZCIsImVudGl0eSIsImdldERlZmF1bHRTdGF0ZUFuZEluZm9TdHlsZSIsImd5bHBoIiwiYWRkUGFyZW50SW5mb1RvTm9kZSIsIm5vZGVPYmoiLCJhZGRDeXRvc2NhcGVKc05vZGUiLCJqc29uQXJyYXkiLCJzdHlsZU9iaiIsInBvcnRFbGVtZW50cyIsInBvcnRFbCIsInJlbGF0aXZlWFBvcyIsInJlbGF0aXZlWVBvcyIsImhhbmRsZUFubm90YXRpb25zIiwiZGlzcGxheSIsImhhc0hpZGRlbk5laWdoYm91ciIsInRoaWNrQm9yZGVyIiwiY29sbGFwc2VkIiwicG9zaXRpb25CZWZvcmVTYXZpbmciLCJjeXRvc2NhcGVKc05vZGUiLCJjeU9iamVjdCIsImRiRnJvbVVybCIsInJlZ2V4cCIsImZpbGxFbGVtZW50RGF0YUFubm90YXRpb24iLCJhbm5vdGF0aW9uSW5kZXgiLCJhbm5vdElkIiwiZ2V0QWxsSWRzIiwicmVzb3VyY2VzIiwiZ2V0UmVzb3VyY2VzT2ZJZCIsImN1c3RvbVByb3BlcnRpZXMiLCJnZXRDdXN0b21Qcm9wZXJ0aWVzT2ZJZCIsImdsb2JhbEFubm90SW5kZXgiLCJmdWxsUXVhbGlmaWVyIiwicmVsYXRpb24iLCJVdGlsIiwicmVkdWNlUHJlZml4IiwidHJhdmVyc2VOb2RlcyIsImVsSWQiLCJlbGVDbGFzcyIsImdseXBoQ2xhc3MiLCJnZXRQb3J0cyIsIl9jYWNoZWRQb3J0cyIsImdldEdseXBocyIsIl9jYWNoZWRHbHlwaHMiLCJpZDJnbHlwaCIsIl9pZDJnbHlwaCIsImdldEFyY3MiLCJfY2FjaGVkQXJjcyIsImlkMmFyYyIsIl9pZDJhcmMiLCJnZXRBcmNTb3VyY2VBbmRUYXJnZXQiLCJzb3VyY2VOb2RlSWQiLCJ0YXJnZXROb2RlSWQiLCJzb3VyY2VFeGlzdHMiLCJ0YXJnZXRFeGlzdHMiLCJwb3J0RWxzIiwicGFyZW50RWxlbWVudCIsImdldEFyY0FuY2hvclBvaW50UG9zaXRpb25zIiwiYW5jaG9yUG9pbnRQb3NpdGlvbnMiLCJuZXh0cyIsImFkZEN5dG9zY2FwZUpzRWRnZSIsInNvdXJjZUFuZFRhcmdldCIsImVkZ2VPYmoiLCJjdXJ2ZVN0eWxlIiwiY29udHJvbFBvaW50UG9zaXRpb25zIiwiYmVuZFBvaW50UG9zaXRpb25zIiwiaXNTaWZNZXRhRWRnZSIsInNpZk1ldGFFZGdlIiwiUGRFZGdlcyIsIkFmRWRnZXMiLCJjeXRvc2NhcGVKc0VkZ2UiLCJhcHBseVN0eWxlIiwiY29sb3JMaXN0IiwiY29sb3JEZWZpbml0aW9ucyIsImNvbG9ySURUb1ZhbHVlIiwiaW1hZ2VMaXN0IiwiYmFja2dyb3VuZEltYWdlcyIsImltYWdlSURUb1ZhbHVlIiwic3R5bGVMaXN0IiwibWVtYmVySURUb1N0eWxlIiwicmVuZGVyR3JvdXAiLCJoZXhUb0RlY2ltYWwiLCJjb252ZXJ0SGV4Q29sb3IiLCJub2RlUHJvcE1hcCIsImVkZ2VQcm9wTWFwIiwiaW5mb2JveFByb3BNYXAiLCJub2RlUHJvcERldGFpbHMiLCJlZGdlUHJvcERldGFpbHMiLCJpbmZvYm94UHJvcERldGFpbHMiLCJnZXRFbGVtZW50SWQiLCJnZXRJbmZvYm94SWQiLCJzZXRFbGVtZW50U3R5bGVQcm9wIiwic2V0SW5mb2JveFN0eWxlUHJvcCIsIm92ZXJyaWRlU3R5bGVQcm9wZXJ0aWVzIiwicHJvcE1hcCIsInByb3BEZXRhaWxzIiwiZ2V0SWQiLCJzZXRTdHlsZVByb3AiLCJtZW1iZXJTdHlsZSIsImZpZWxkTmFtZSIsImZpZWxkVmFsIiwiZGV0YWlscyIsImN5dG9zY2FwZUpzTm9kZXMiLCJjeXRvc2NhcGVKc0VkZ2VzIiwiY29tcGFydG1lbnRDaGlsZHJlbk1hcCIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZyb21YTUwiLCJtYXBzIiwibWluRGlzdGFuY2VUb0NoaWxkcmVuIiwiTUFYX1NBRkVfSU5URUdFUiIsImhhc01pbiIsIm5ld1BhZGRpbmciLCJjeXRvc2NhcGVKc0dyYXBoIiwic2hvdWxkRGlzYWJsZVBvcnRzIiwiZXJyb3JzIiwiY29udmVyc2lvbkFwaVVybCIsImRhdGFUeXBlIiwidGV4dFN0YXR1cyIsInhociIsImZhaWwiLCJnZXRFbXB0eUdyYXBoRGF0YSIsImluaXRHcmFwaFZhcmlhYmxlcyIsIm5hbWVUb05vZGUiLCJrZXlUb0VkZ2UiLCJub2RlV2l0aFNwZWNpZmllZENsYXNzIiwiZGVmYXVsdE5vZGVUeXBlIiwibWVyZ2VHcmFwaERhdGEiLCJncmFwaFRleHQiLCJub2RlTmFtZSIsImdldE9yQ3JlYXRlTm9kZSIsImVkZ2VUeXBlIiwic3JjQ2xhc3MiLCJnZXROb2RlQ2xhc3MiLCJ0Z3RDbGFzcyIsImdldE9yQ3JlYXRlRWRnZSIsImdldE5vZGVCeU5hbWUiLCJnZXRFZGdlQnlQcm9wcyIsImNhbGN1bGF0ZUVkZ2VLZXkiLCJtYXBOb2RlVG9OYW1lIiwibWFwRWRnZVRvS2V5Iiwic3JjIiwidGd0IiwiY2xhc3NOYW1lU3BlY2lmaWVkIiwidXBkYXRlV2l0aERlZmF1bHRzIiwiaXNEeW5hbWljTGFiZWwiLCJnZXRNYXBQcm9wZXJ0eSIsInVpZCIsInJvbGUiLCJzZXBhcmF0b3IiLCJub3RFbXB0eSIsInZhbGlkYXRlTm9kZVR5cGUiLCJfdHlwZSIsImhhc093blByb3BlcnR5IiwidmFsaWRhdGVFZGdlVHlwZSIsImNvbnZlcnRUeXBlVG9DbGFzcyIsImFkZEluZm9Cb3giLCJ1bml0T2ZJbmZvcm1hdGlvbiIsImdyYXBoRGF0YUluZGV4IiwiZWRnZXNTdGFydEluZGV4IiwiZm9ybWF0VmVyc2lvbiIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtYXBEZXNjcmlwdGlvbiIsIm1hcE5hbWUiLCJwYXJlbnRJRCIsIm5ld05vZGUiLCJncm91cCIsImVkZ2VJRCIsImVkZ2VTb3VyY2UiLCJlZGdlVGFyZ2V0IiwibmV3RWRnZSIsImpzR3JhcGgiLCJnZXRDb250ZXh0IiwibWVhc3VyZVRleHQiLCJlbGxpcHNpcyIsImZpbmFsTGVuZ3RoIiwic3VidGV4dCIsIm9yaWdpbmFsSWQiLCJ4bWxWYWxpZFJlZ2V4IiwidGVzdCIsIkRFRkFVTFRfTUFSR0lOIiwic2hvdWxkQXBwZW5kIiwidmFsaWRGb250U2l6ZSIsImlucHV0IiwidG9VcHBlckNhc2UiLCJjb250YWluZXJXaWR0aCIsImNvbnRhaW5lckhlaWdodCIsInByZXBlbmQiLCJwb3J0c0NvcHkiLCJwb3J0c1RvUmV0dXJuIiwib3JkZXJpbmdzVG9SZXR1cm4iLCJhcnJvd1NjYWxlIiwicmVjYWxjdWxhdGVMYXlvdXRPbkNvbXBsZXhpdHlNYW5hZ2VtZW50IiwicmVhcnJhbmdlT25Db21wbGV4aXR5TWFuYWdlbWVudCIsImFuaW1hdGVPbkRyYXdpbmdDaGFuZ2VzIiwiYWxsb3dDb21wb3VuZE5vZGVSZXNpemUiLCJtYXBDb2xvclNjaGVtZSIsIm1hcENvbG9yU2NoZW1lU3R5bGUiLCJlbmFibGVTSUZUb3BvbG9neUdyb3VwaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTzs7Ozs7Ozs7O0FDVkEsQ0FBQyxZQUFVO0FBQ1QsTUFBSUEsT0FBTyxHQUFHLFNBQVZBLE9BQVUsQ0FBU0MsUUFBVCxFQUFtQjtBQUUvQixRQUFJQyxLQUFLLEdBQUcsRUFBWixDQUYrQixDQUVmOztBQUVoQixRQUFJQyxlQUFlLEdBQUdDLG1CQUFPLENBQUMseUZB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QixFQUFFLElBTkg7QUFPZnl0QixvQkFBa0IsRUFBRSxJQVBMO0FBUWYvekMsa0JBQWdCLEVBQUUsSUFSSDtBQVNmb1Usc0JBQW9CLEVBQUUsSUFUUDtBQVVmdXZDLHlDQUF1QyxFQUFFLElBVjFCO0FBV2ZDLGlDQUErQixFQUFFLElBWGxCO0FBWWZDLHlCQUF1QixFQUFFLElBWlY7QUFhZmhrRCxzQ0FBb0MsRUFBRSxJQWJ2QjtBQWNmKytCLGFBQVcsRUFBRSxJQWRFO0FBZWZrbEIseUJBQXVCLEVBQUUsSUFmVjtBQWdCZkMsZ0JBQWMsRUFBRSxJQWhCRDtBQWlCZkMscUJBQW1CLEVBQUUsSUFqQk47QUFrQmZsQyxTQUFPLEVBQUUsSUFsQk07QUFtQmZELGdCQUFjLEVBQUUsSUFuQkQ7QUFvQmZvQywyQkFBeUIsRUFBRSxJQXBCWjtBQXFCZm5nQix1QkFBcUIsRUFBRTtBQXJCUixDQUFqQixDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSkEsZ0Q7Ozs7Ozs7Ozs7O0FDQUEsd0M7Ozs7Ozs7Ozs7O0FDQUEseUM7Ozs7Ozs7Ozs7O0FDQUEsb0M7Ozs7OztVQ0FBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7O1VBRUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7Ozs7VUN0QkE7VUFDQTtVQUNBO1VBQ0EiLCJmaWxlIjoic2JnbnZpei5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInNiZ252aXpcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wic2JnbnZpelwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIihmdW5jdGlvbigpe1xuICB2YXIgc2JnbnZpeiA9IGZ1bmN0aW9uKF9vcHRpb25zKSB7XG5cbiAgICB2YXIgcGFyYW0gPSB7fTsgLy8gVGhlIHBhcmFtZXRlciB0byBiZSBwYXNzZWQgdG8gYWxsIHV0aWxpdGllcyBpbnN0YW5jZXMgcmVsYXRlZCB0byB0aGlzIHNiZ252aXogaW5zdGFuY2VcblxuICAgIHZhciBvcHRpb25VdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9vcHRpb24tdXRpbGl0aWVzLWZhY3RvcnknKSgpO1xuICAgIHZhciBvcHRpb25zID0gb3B0aW9uVXRpbGl0aWVzLmV4dGVuZE9wdGlvbnMoX29wdGlvbnMpO1xuXG4gICAgdmFyIHNiZ25DeUluc3RhbmNlID0gcmVxdWlyZSgnLi9zYmduLWV4dGVuc2lvbnMvc2Jnbi1jeS1pbnN0YW5jZS1mYWN0b3J5JykoKTtcblxuICAgIC8vIFV0aWxpdGllcyB3aG9zZSBmdW5jdGlvbnMgd2lsbCBiZSBleHBvc2VkIHNlcGVyYXRlbHlcbiAgICB2YXIgdWlVdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy91aS11dGlsaXRpZXMtZmFjdG9yeScpKCk7XG4gICAgdmFyIGZpbGVVdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9maWxlLXV0aWxpdGllcy1mYWN0b3J5JykoKTtcbiAgICB2YXIgZ3JhcGhVdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9ncmFwaC11dGlsaXRpZXMtZmFjdG9yeScpKCk7XG4gICAgdmFyIG1haW5VdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9tYWluLXV0aWxpdGllcy1mYWN0b3J5JykoKTtcbiAgICB2YXIga2V5Ym9hcmRJbnB1dFV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2tleWJvYXJkLWlucHV0LXV0aWxpdGllcy1mYWN0b3J5JykoKTsgLy8gcmVxdWlyZSBrZXlib3JkIGlucHV0IHV0aWxpdGllc1xuICAgIHZhciBleHBlcmltZW50YWxEYXRhT3ZlcmxheSA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2V4cGVyaW1lbnRhbC1kYXRhLW92ZXJsYXknKSgpO1xuICAgIC8vIFV0aWxpdGllcyB0byBiZSBleHBvc2VkIGFzIGlzXG4gICAgdmFyIGVsZW1lbnRVdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9lbGVtZW50LXV0aWxpdGllcy1mYWN0b3J5JykoKTtcbiAgICB2YXIgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy91bmRvLXJlZG8tYWN0aW9uLWZ1bmN0aW9ucy1mYWN0b3J5JykoKTtcblxuICAgIC8vIE90aGVyIHV0aWxpdGllc1xuICAgIHZhciBqc29uVG9TYmdubWxDb252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9qc29uLXRvLXNiZ25tbC1jb252ZXJ0ZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIGpzb25Ub053dENvbnZlcnRlciA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL2pzb24tdG8tbnd0LWNvbnZlcnRlci1mYWN0b3J5JykoKTtcbiAgICB2YXIgc2Jnbm1sVG9Kc29uQ29udmVydGVyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvc2Jnbm1sLXRvLWpzb24tY29udmVydGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBud3RUb0pzb25Db252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9ud3QtdG8tanNvbi1jb252ZXJ0ZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIHRkVG9Kc29uQ29udmVydGVyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvdGFiLWRlbGltaXRlZC10by1qc29uLWNvbnZlcnRlci1mYWN0b3J5JykoKTtcbiAgICB2YXIgc2lmVG9Kc29uQ29udmVydGVyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvc2lmLXRvLWpzb24tY29udmVydGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBqc29uVG9TaWZDb252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9qc29uLXRvLXNpZi1jb252ZXJ0ZXItZmFjdG9yeScpKCk7XG4gICAgdmFyIGNsYXNzZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9jbGFzc2VzJyk7XG4gICAgdmFyIHRkUGFyc2VyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvdGFiLWRlbGltZXRlZC1wYXJzZXInKTtcbiAgICB2YXIgbGF5b3V0TG9hZGVyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvbGF5b3V0LWxvYWRlci1mYWN0b3J5JykoKTtcbiAgICB2YXIgbGF5b3V0VG9UZXh0ID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvbGF5b3V0LXRvLXRleHQtZmFjdG9yeScpKCk7XG4gICAgdmFyIGNkVG9TYmdubWxDb252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9jZC10by1zYmdubWwtY29udmVydGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBzYmdubWxUb0NkQ29udmVydGVyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvc2Jnbm1sLXRvLWNkLWNvbnZlcnRlci1mYWN0b3J5JykoKTtcbiAgICB2YXIgc2Jnbm1sVG9TYm1sQ29udmVydGVyID0gcmVxdWlyZSgnLi91dGlsaXRpZXMvc2Jnbm1sLXRvLXNibWwtY29udmVydGVyLWZhY3RvcnknKSgpO1xuICAgIHZhciBzYm1sVG9TYmdubWxDb252ZXJ0ZXIgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9zYm1sLXRvLXNiZ25tbC1jb252ZXJ0ZXItZmFjdG9yeScpKCk7XG4gICAgLy8gRmlsbCBwYXJhbSBvYmplY3QgdG8gdXNlIGl0IHV0aWxpdGllcyBpbnRlcm5hbGx5XG4gICAgXG4gICAgcGFyYW0ub3B0aW9uVXRpbGl0aWVzID0gb3B0aW9uVXRpbGl0aWVzO1xuICAgIHBhcmFtLnNiZ25DeUluc3RhbmNlID0gc2JnbkN5SW5zdGFuY2U7XG4gICAgcGFyYW0udWlVdGlsaXRpZXMgPSB1aVV0aWxpdGllcztcbiAgICBwYXJhbS5maWxlVXRpbGl0aWVzID0gZmlsZVV0aWxpdGllcztcbiAgICBwYXJhbS5ncmFwaFV0aWxpdGllcyA9IGdyYXBoVXRpbGl0aWVzO1xuICAgIHBhcmFtLm1haW5VdGlsaXRpZXMgPSBtYWluVXRpbGl0aWVzO1xuICAgIHBhcmFtLmtleWJvYXJkSW5wdXRVdGlsaXRpZXMgPSBrZXlib2FyZElucHV0VXRpbGl0aWVzO1xuICAgIHBhcmFtLmVsZW1lbnRVdGlsaXRpZXMgPSBlbGVtZW50VXRpbGl0aWVzO1xuICAgIHBhcmFtLnVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnM7XG4gICAgcGFyYW0uanNvblRvU2Jnbm1sQ29udmVydGVyID0ganNvblRvU2Jnbm1sQ29udmVydGVyO1xuICAgIHBhcmFtLmpzb25Ub053dENvbnZlcnRlciA9IGpzb25Ub053dENvbnZlcnRlcjtcbiAgICBwYXJhbS5zYmdubWxUb0pzb25Db252ZXJ0ZXIgPSBzYmdubWxUb0pzb25Db252ZXJ0ZXI7XG4gICAgcGFyYW0ubnd0VG9Kc29uQ29udmVydGVyID0gbnd0VG9Kc29uQ29udmVydGVyO1xuICAgIHBhcmFtLnRkVG9Kc29uQ29udmVydGVyID0gdGRUb0pzb25Db252ZXJ0ZXI7XG4gICAgcGFyYW0uc2lmVG9Kc29uQ29udmVydGVyID0gc2lmVG9Kc29uQ29udmVydGVyO1xuICAgIHBhcmFtLmNsYXNzZXMgPSBjbGFzc2VzO1xuICAgIHBhcmFtLmxheW91dExvYWRlciA9IGxheW91dExvYWRlcjtcbiAgICBwYXJhbS5sYXlvdXRUb1RleHQgPSBsYXlvdXRUb1RleHQ7XG4gICAgcGFyYW0uanNvblRvU2lmQ29udmVydGVyID0ganNvblRvU2lmQ29udmVydGVyO1xuICAgIHBhcmFtLmNkVG9TYmdubWxDb252ZXJ0ZXIgPSBjZFRvU2Jnbm1sQ29udmVydGVyO1xuICAgIHBhcmFtLnNiZ25tbFRvQ2RDb252ZXJ0ZXIgPSBzYmdubWxUb0NkQ29udmVydGVyO1xuICAgIHBhcmFtLnNiZ25tbFRvU2JtbENvbnZlcnRlciA9IHNiZ25tbFRvU2JtbENvbnZlcnRlcjtcbiAgICBwYXJhbS5zYm1sVG9TYmdubWxDb252ZXJ0ZXIgPSBzYm1sVG9TYmdubWxDb252ZXJ0ZXI7XG4gICAgcGFyYW0uZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkgPSBleHBlcmltZW50YWxEYXRhT3ZlcmxheTtcblxuICAgIC8vIGNhbGwgY29uc3RydWN0b3JzIG9mIG9iamVjdHMgd2l0aCBwYXJhbVxuICAgIFxuICAgIHNiZ25DeUluc3RhbmNlKHBhcmFtKTtcbiAgICBvcHRpb25VdGlsaXRpZXMocGFyYW0pO1xuICAgIHVpVXRpbGl0aWVzKHBhcmFtKTtcbiAgICBmaWxlVXRpbGl0aWVzKHBhcmFtKTtcbiAgICBncmFwaFV0aWxpdGllcyhwYXJhbSk7XG4gICAgbWFpblV0aWxpdGllcyhwYXJhbSk7XG4gICAga2V5Ym9hcmRJbnB1dFV0aWxpdGllcyhwYXJhbSk7XG4gICAgZWxlbWVudFV0aWxpdGllcyhwYXJhbSk7XG4gICAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMocGFyYW0pO1xuICAgIGpzb25Ub1NiZ25tbENvbnZlcnRlcihwYXJhbSk7XG4gICAganNvblRvTnd0Q29udmVydGVyKHBhcmFtKTtcbiAgICBzYmdubWxUb0pzb25Db252ZXJ0ZXIocGFyYW0pO1xuICAgIG53dFRvSnNvbkNvbnZlcnRlcihwYXJhbSk7XG4gICAgdGRUb0pzb25Db252ZXJ0ZXIocGFyYW0pO1xuICAgIHNpZlRvSnNvbkNvbnZlcnRlcihwYXJhbSk7XG4gICAgbGF5b3V0TG9hZGVyKHBhcmFtKTtcbiAgICBsYXlvdXRUb1RleHQocGFyYW0pO1xuICAgIGpzb25Ub1NpZkNvbnZlcnRlcihwYXJhbSk7XG4gICAgY2RUb1NiZ25tbENvbnZlcnRlcihwYXJhbSk7XG4gICAgc2Jnbm1sVG9DZENvbnZlcnRlcihwYXJhbSk7XG4gICAgc2Jnbm1sVG9TYm1sQ29udmVydGVyKHBhcmFtKTtcbiAgICBzYm1sVG9TYmdubWxDb252ZXJ0ZXIocGFyYW0pO1xuICAgIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5KHBhcmFtKTtcblxuICAgIC8vIHNldCBzY3JhdGNoIHBhZCBmb3Igc2JnbnZpeiBhbmQgaW5pdCBzYmdudml6UGFyYW1zIGluc2lkZSBpdFxuICAgIHNiZ25DeUluc3RhbmNlLmdldEN5KCkuc2NyYXRjaCgnX3NiZ252aXonLCB7fSk7XG4gICAgc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKS5zY3JhdGNoKCdfc2JnbnZpeicpLnNiZ252aXpQYXJhbXMgPSBwYXJhbTtcblxuICAgIC8vIEV4cG9zZSB0aGUgYXBpXG4gICAgdmFyIGFwaSA9IHt9O1xuXG4gICAgLy8gRXhwb3NlIGVsZW1lbnRVdGlsaXRpZXMgYW5kIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zIGFzIGlzLCBtb3N0IHVzZXJzIHdpbGwgbm90IG5lZWQgdGhlc2VcbiAgICBhcGkuZWxlbWVudFV0aWxpdGllcyA9IGVsZW1lbnRVdGlsaXRpZXM7XG4gICAgYXBpLnVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zID0gdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnM7XG4gICAgLy9hcGkuZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkgPSBleHBlcmltZW50YWxEYXRhT3ZlcmxheTtcbiAgICBcbiAgICAvL2V4cG9zZSB1dGlsaXR5IG9mIGV4cGVyaW1lbnRhbCBkYXRhLW92ZXJsYXlcbiAgICBmb3IgKHZhciBwcm9wIGluIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5KSB7XG4gICAgICBhcGlbcHJvcF0gPSBleHBlcmltZW50YWxEYXRhT3ZlcmxheVtwcm9wXTtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgZWFjaCBtYWluIHV0aWxpdHkgc2VwZXJhdGVseVxuICAgIGZvciAodmFyIHByb3AgaW4gbWFpblV0aWxpdGllcykge1xuICAgICAgYXBpW3Byb3BdID0gbWFpblV0aWxpdGllc1twcm9wXTtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgZWFjaCBmaWxlIHV0aWxpdHkgc2VwZXJhdGVseVxuICAgIGZvciAodmFyIHByb3AgaW4gZmlsZVV0aWxpdGllcykge1xuICAgICAgYXBpW3Byb3BdID0gZmlsZVV0aWxpdGllc1twcm9wXTtcbiAgICB9XG5cbiAgICAvLyBFeHBvc2UgZWFjaCBmaWxlIHV0aWxpdHkgc2VwZXJhdGVseVxuICAgIGZvciAodmFyIHByb3AgaW4gdWlVdGlsaXRpZXMpIHtcbiAgICAgIGFwaVtwcm9wXSA9IHVpVXRpbGl0aWVzW3Byb3BdO1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSBlYWNoIHNiZ24gZ3JhcGggdXRpbGl0eSBzZXBlcmF0ZWx5XG4gICAgZm9yICh2YXIgcHJvcCBpbiBncmFwaFV0aWxpdGllcykge1xuICAgICAgYXBpW3Byb3BdID0gZ3JhcGhVdGlsaXRpZXNbcHJvcF07XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIGdldCBjeSBmdW5jdGlvbiB0byBlbmFibGUgYWNjZXNzaW5nIHJlbGF0ZWQgY3kgaW5zdGFuY2VcbiAgICBhcGkuZ2V0Q3kgPSBzYmduQ3lJbnN0YW5jZS5nZXRDeTtcblxuICAgIC8vIEV4cG9zZSBzb21lIHV0aWxpdGllcyBkaXJlY3RseSBoZXJlXG4gICAgYXBpLmNsYXNzZXMgPSBjbGFzc2VzO1xuICAgIGFwaS50ZFBhcnNlciA9IHRkUGFyc2VyO1xuXG4gICAgcmV0dXJuIGFwaTtcbiAgfTtcblxuICBzYmdudml6LnZhbGlkTWFwUHJvcGVydGllcyA9IHJlcXVpcmUoJy4vdXRpbGl0aWVzL3ZhbGlkTWFwUHJvcGVydGllcycpO1xuXG4gIHNiZ252aXoucmVnaXN0ZXIgPSBmdW5jdGlvbiAoX2xpYnMpIHtcblxuICAgIHZhciBsaWJzID0ge307XG4gICAgbGlicy5qUXVlcnkgPSBfbGlicy5qUXVlcnkgfHwgalF1ZXJ5O1xuICAgIGxpYnMuY3l0b3NjYXBlID0gX2xpYnMuY3l0b3NjYXBlIHx8IGN5dG9zY2FwZTtcbiAgICBsaWJzLnNhdmVBcyA9IF9saWJzLmZpbGVzYXZlciA/IF9saWJzLmZpbGVzYXZlci5zYXZlQXMgOiBzYXZlQXM7XG4gICAgbGlicy50aXBweSA9IF9saWJzLnRpcHB5IHx8IFRpcHB5O1xuXG4gICAgLy8gU2V0IHRoZSBsaWJyYXJpZXMgdG8gYWNjZXNzIHRoZW0gZnJvbSBhbnkgZmlsZVxuICAgIHZhciBsaWJVdGlsaXRpZXMgPSByZXF1aXJlKCcuL3V0aWxpdGllcy9saWItdXRpbGl0aWVzJyk7XG4gICAgbGliVXRpbGl0aWVzLnNldExpYnMobGlicyk7XG5cbiAgICB2YXIgc2JnblJlbmRlcmVyID0gcmVxdWlyZSgnLi9zYmduLWV4dGVuc2lvbnMvc2Jnbi1jeS1yZW5kZXJlcicpO1xuICAgIHNiZ25SZW5kZXJlcigpO1xuICB9O1xuXG4gIGlmICggdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBzYmdudml6O1xuICB9XG59KSgpO1xuIiwidmFyIGNsYXNzZXMgPSByZXF1aXJlKCcuLi91dGlsaXRpZXMvY2xhc3NlcycpO1xudmFyIGxpYnMgPSByZXF1aXJlKCcuLi91dGlsaXRpZXMvbGliLXV0aWxpdGllcycpLmdldExpYnMoKTtcbnZhciBqUXVlcnkgPSAkID0gbGlicy5qUXVlcnk7XG52YXIgY3l0b3NjYXBlID0gbGlicy5jeXRvc2NhcGU7XG52YXIgVGlwcHkgPSBsaWJzLnRpcHB5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblxuXHR2YXIgZWxlbWVudFV0aWxpdGllcywgZ3JhcGhVdGlsaXRpZXMsIG1haW5VdGlsaXRpZXMsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLCBvcHRpb25VdGlsaXRpZXMsIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5O1xuXHR2YXIgcmVmcmVzaFBhZGRpbmdzLCBvcHRpb25zLCBjeTtcblxuXHR2YXIgc2JnbkN5SW5zdGFuY2UgPSBmdW5jdGlvbiAocGFyYW0pIHtcblx0XHRlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcblx0XHRncmFwaFV0aWxpdGllcyA9IHBhcmFtLmdyYXBoVXRpbGl0aWVzO1xuXHRcdGV4cGVyaW1lbnRhbERhdGFPdmVybGF5ID0gcGFyYW0uZXhwZXJpbWVudGFsRGF0YU92ZXJsYXk7XG4gICAgbWFpblV0aWxpdGllcyA9IHBhcmFtLm1haW5VdGlsaXRpZXM7XG5cdFx0dW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMgPSBwYXJhbS51bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucztcblx0XHRyZWZyZXNoUGFkZGluZ3MgPSBncmFwaFV0aWxpdGllcy5yZWZyZXNoUGFkZGluZ3MuYmluZChncmFwaFV0aWxpdGllcyk7XG5cblx0XHRvcHRpb25VdGlsaXRpZXMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXM7XG5cdFx0b3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG5cblx0XHQvLyBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG5cblx0XHQvKlxuXHRcdCAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBsb2NhdGVkIG9uIHRoZSBnaXZlbiBhbmdsZSBvbiB0aGUgY2lyY2xlIHdpdGggdGhlIGdpdmVuIGNlbnRlcmFsIGNvb3JkaW5hdGVzIGFuZCByYWRpdXMuXG5cdFx0ICovXG5cdFx0dmFyIGdldFBvaW50T25DaXJjbGUgPSBmdW5jdGlvbihjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIGFuZ2xlSW5EZWdyZWUpIHtcblx0XHRcdHZhciBhbmdsZUluUmFkaWFuID0gYW5nbGVJbkRlZ3JlZSAqICggTWF0aC5QSSAvIDE4MCApOyAvLyBDb252ZXJ0IGRlZ3JlZSB0byByYWRpYW5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHg6IHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlSW5SYWRpYW4pICsgY2VudGVyWCxcblx0XHRcdFx0eTogLTEgKiByYWRpdXMgKiBNYXRoLnNpbihhbmdsZUluUmFkaWFuKSArIGNlbnRlclkgLy8gV2UgbXVsdGlwbHkgd2l0aCAtMSBoZXJlIGJlY2F1c2UgSlMgeSBjb29yZGluYXRlIHNpZ24gaXMgdGhlIG9wb3NpdGUgb2YgdGhlIE1hdGhhbWF0aWNhbCBjb29yZGluYXRlcyBzeXN0ZW1cblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8qXG5cdFx0ICogR2VuZXJhdGVzIGEgcG9seWdvbiBzdHJpbmcgYXBwcm94aW1hdGluZyBhIGNpcmNsZSB3aXRoIGdpdmVuIGNlbnRlciwgcmFkaXVzLCBzdGFydCwgZW5kIGFuZ2xlcyBhbmQgbnVtYmVyIG9mIHBvaW50cyB0byByZXByZXNlbnQgdGhlIGNpcmNsZVxuXHRcdCAqL1xuXHRcdHZhciBnZW5lcmF0ZUNpcmNsZVN0cmluZyA9IGZ1bmN0aW9uKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgYW5nbGVGcm9tLCBhbmdsZVRvLCBudW1PZlBvaW50cykge1xuXHRcdFx0dmFyIGNpcmNsZVN0ciA9IFwiXCI7XG5cdFx0XHR2YXIgc3RlcFNpemUgPSAoIGFuZ2xlVG8gLSBhbmdsZUZyb20gKSAvIG51bU9mUG9pbnRzOyAvLyBXZSB3aWxsIGluY3JlbWVudCB0aGUgY3VycmVudCBhbmdsZSBieSBzdGVwIHNpemUgaW4gZWFjaCBpdGVyYXRpb25cblx0XHRcdHZhciBjdXJyZW50QW5nbGUgPSBhbmdsZUZyb207IC8vIGN1cnJlbnQgYW5nbGUgd2lsbCBiZSB1cGRhdGVkIGluIGVhY2ggaXRlcmF0aW9uXG5cblx0XHRcdGZvciAoIHZhciBpID0gMDsgaSA8IG51bU9mUG9pbnRzOyBpKysgKSB7XG5cdFx0XHRcdHZhciBwb2ludCA9IGdldFBvaW50T25DaXJjbGUoY2VudGVyWCwgY2VudGVyWSwgcmFkaXVzLCBjdXJyZW50QW5nbGUpO1xuXHRcdFx0XHRjdXJyZW50QW5nbGUgKz0gc3RlcFNpemU7XG5cdFx0XHRcdGNpcmNsZVN0ciArPSBwb2ludC54ICsgXCIgXCIgKyBwb2ludC55ICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjaXJjbGVTdHI7XG5cdFx0fTtcblxuXHRcdC8qXG5cdFx0ICogIEdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRpbmcgcHJvY2Vzc2VzL2xvZ2ljYWwgb3BlcmF0b3JzIHdpdGggcG9ydHMuXG5cdFx0ICogIGxpbmVIVzogSGFsZiB3aWR0aCBvZiBsaW5lIHRocm91Z2ggdGhlIGNpcmNsZSB0byB0aGUgaW50ZXJzZWN0aW9uIHBvaW50XG5cdFx0ICogIHNoYXBlSFc6IEhhbGYgd2lkdGggb2YgdGhlIHNoYXBlIGRpc2NsdWRpbmcgdGhlIHBvcnRzIChJdCBpcyByYWRpdXMgZm9yIHRoZSBjaXJjdWxhciBzaGFwZXMpXG5cdFx0ICogIHR5cGU6IFR5cGUgb2YgdGhlIHNoYXBlIGRpc2NsdWRpbmcgdGhlIHBvcnRzLiBPcHRpb25zIGFyZSAnY2lyY2xlJywgJ3JlY3RhbmdsZSdcblx0XHQgKiAgb3JpZW50YXRpb246IE9yaWVudGF0aW9uIG9mIHRoZSBwb3J0cyBPcHRpb25zIGFyZSAnaG9yaXpvbnRhbCcsICd2ZXJ0aWNhbCdcblx0XHQgKi9cblxuXHRcdHZhciBnZW5lcmF0ZVNoYXBlV2l0aFBvcnRTdHJpbmcgPSBmdW5jdGlvbihsaW5lSFcsIHNoYXBlSFcsIHR5cGUsIG9yaWVudGF0aW9uKSB7XG5cdFx0XHR2YXIgcG9seWdvblN0cjtcblx0XHQgICAgdmFyIG51bU9mUG9pbnRzID0gMzA7IC8vIE51bWJlciBvZiBwb2ludHMgdGhhdCBib3RoIGhhbHZlcyBvZiBjaXJjbGUgd2lsbCBoYXZlXG5cdFx0XHRpZiAob3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuXHRcdFx0XHR2YXIgYWJvdmVQb2ludHMsIGJlbG93UG9pbnRzO1xuXG5cdFx0XHRcdGlmICh0eXBlID09PSAnY2lyY2xlJykge1xuXHRcdFx0XHRcdGFib3ZlUG9pbnRzID0gZ2VuZXJhdGVDaXJjbGVTdHJpbmcoMCwgMCwgc2hhcGVIVywgMTgwLCAwLCBudW1PZlBvaW50cyk7XG5cdFx0XHRcdFx0YmVsb3dQb2ludHMgPSBnZW5lcmF0ZUNpcmNsZVN0cmluZygwLCAwLCBzaGFwZUhXLCAzNjAsIDE4MCwgbnVtT2ZQb2ludHMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKHR5cGUgPT09ICdyZWN0YW5nbGUnKSB7XG5cdFx0XHRcdFx0YWJvdmVQb2ludHMgPSAnLScgKyBzaGFwZUhXICsgJyAtJyArIHNoYXBlSFcgKyAnICcgKyBzaGFwZUhXICsgJyAtJyArIHNoYXBlSFcgKyAnICc7XG5cdFx0XHRcdFx0YmVsb3dQb2ludHMgPSBzaGFwZUhXICsgJyAnICsgc2hhcGVIVyArICcgLScgKyBzaGFwZUhXICsgJyAnICsgc2hhcGVIVyArICcgJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHBvbHlnb25TdHIgPSBcIi0xIC1cIiArIGxpbmVIVyArIFwiIC1cIiArIHNoYXBlSFcgKyBcIiAtXCIgKyBsaW5lSFcgKyBcIiBcIjtcblx0XHRcdFx0cG9seWdvblN0ciArPSBhYm92ZVBvaW50cztcblx0XHRcdFx0cG9seWdvblN0ciArPSBzaGFwZUhXICsgXCIgLVwiICsgbGluZUhXICsgXCIgMSAtXCIgKyBsaW5lSFcgKyBcIiAxIFwiICsgbGluZUhXICsgXCIgXCIgKyBzaGFwZUhXICsgXCIgXCIgKyBsaW5lSFcgKyBcIiBcIjtcblx0XHRcdFx0cG9seWdvblN0ciArPSBiZWxvd1BvaW50cztcblx0XHRcdFx0cG9seWdvblN0ciArPSBcIi1cIiArIHNoYXBlSFcgKyBcIiBcIiArIGxpbmVIVyArIFwiIC0xIFwiICsgbGluZUhXO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdHZhciBsZWZ0UG9pbnRzLCByaWdodFBvaW50cztcblxuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2NpcmNsZScpIHtcblx0XHRcdFx0XHRsZWZ0UG9pbnRzID0gZ2VuZXJhdGVDaXJjbGVTdHJpbmcoMCwgMCwgc2hhcGVIVywgOTAsIDI3MCwgbnVtT2ZQb2ludHMpO1xuXHRcdFx0XHRcdHJpZ2h0UG9pbnRzID0gZ2VuZXJhdGVDaXJjbGVTdHJpbmcoMCwgMCwgc2hhcGVIVywgLTkwLCA5MCwgbnVtT2ZQb2ludHMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2UgaWYgKHR5cGUgPT09ICdyZWN0YW5nbGUnKSB7XG5cdFx0XHRcdFx0bGVmdFBvaW50cyA9ICctJyArIHNoYXBlSFcgKyAnIC0nICsgc2hhcGVIVyArICcgLScgKyBzaGFwZUhXICsgJyAnICsgc2hhcGVIVyArICcgJztcblx0XHRcdFx0XHRyaWdodFBvaW50cyA9IHNoYXBlSFcgKyAnICcgKyBzaGFwZUhXICsgJyAnICsgc2hhcGVIVyArICcgLScgKyBzaGFwZUhXICsgJyAnO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cG9seWdvblN0ciA9IFwiLVwiICsgbGluZUhXICsgXCIgLVwiICsgMSArIFwiIC1cIiArIGxpbmVIVyArIFwiIC1cIiArIHNoYXBlSFcgKyBcIiBcIjtcblx0XHRcdFx0cG9seWdvblN0ciArPSBsZWZ0UG9pbnRzO1xuXHRcdFx0XHRwb2x5Z29uU3RyICs9IFwiLVwiICsgbGluZUhXICsgXCIgXCIgKyBzaGFwZUhXICsgXCIgLVwiICsgbGluZUhXICsgXCIgMSBcIiArIGxpbmVIVyArIFwiIDEgXCIgKyBsaW5lSFcgKyBcIiBcIiArIHNoYXBlSFcgKyBcIiBcIjtcblx0XHRcdFx0cG9seWdvblN0ciArPSByaWdodFBvaW50cztcblx0XHRcdFx0cG9seWdvblN0ciArPSBsaW5lSFcgKyBcIiAtXCIgKyBzaGFwZUhXICsgXCIgXCIgKyBsaW5lSFcgKyBcIiAtMVwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcG9seWdvblN0cjtcblx0XHR9O1xuXG5cdFx0Ly8gTm90ZSB0aGF0IGluIENoaVNFIHRoaXMgZnVuY3Rpb24gaXMgaW4gYSBzZXBlcmF0ZSBmaWxlIGJ1dCBpbiB0aGUgdmlld2VyIGl0IGhhcyBqdXN0IDIgbWV0aG9kcyBhbmQgc28gaXQgaXMgbG9jYXRlZCBpbiB0aGlzIGZpbGVcblx0ICBmdW5jdGlvbiByZWdpc3RlclVuZG9SZWRvQWN0aW9ucygpIHtcblx0ICAgIC8vIGNyZWF0ZSBvciBnZXQgdGhlIHVuZG8tcmVkbyBpbnN0YW5jZVxuXHQgICAgdmFyIHVyID0gY3kudW5kb1JlZG8oKTtcblxuXHQgICAgLy8gcmVnaXN0ZXIgZ2VuZXJhbCBhY3Rpb25zXG5cdCAgICAvLyByZWdpc3RlciBhZGQgcmVtb3ZlIGFjdGlvbnNcblx0ICAgIHVyLmFjdGlvbihcImRlbGV0ZUVsZXNTaW1wbGVcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVzdG9yZUVsZXMpO1xuXHQgICAgdXIuYWN0aW9uKFwiZGVsZXRlTm9kZXNTbWFydFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVOb2Rlc1NtYXJ0LCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXN0b3JlRWxlcyk7XG5cdFx0dXIuYWN0aW9uKFwic2V0UG9ydHNPcmRlcmluZ1wiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRQb3J0c09yZGVyaW5nLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRQb3J0c09yZGVyaW5nKTtcblx0XHRcblx0XHQvL2V4cGVyaW1lbnRhbCBkYXRhIG92YXJsYXlcblx0XHR1ci5hY3Rpb24oXCJyZW1vdmVBbGxcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVtb3ZlQWxsLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZXN0b3JlQWxsKTtcblx0XHR1ci5hY3Rpb24oXCJoaWRlRXhwZXJpbWVudFwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlRXhwLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmhpZGVFeHApO1xuXHRcdHVyLmFjdGlvbihcInVuaGlkZUV4cGVyaW1lbnRcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5oaWRlRXhwLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlRXhwKTtcblx0XHR1ci5hY3Rpb24oXCJoaWRlRmlsZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlRmlsZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuaGlkZUZpbGVVbmRvKTtcblx0XHR1ci5hY3Rpb24oXCJ1bmhpZGVGaWxlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuaGlkZUZpbGUsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuaGlkZUZpbGVVbmRvKTtcblx0XHR1ci5hY3Rpb24oXCJyZW1vdmVFeHBlcmltZW50XCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZUV4cCwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkRXhwKTtcblx0XHR1ci5hY3Rpb24oXCJyZW1vdmVGaWxlXCIsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnJlbW92ZUZpbGUsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZEZpbGUpO1xuXHRcdHVyLmFjdGlvbihcImV4cEJ1dHRvbkNoYW5nZVwiLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5leHBCdXR0b25DaGFuZ2UsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmV4cEJ1dHRvbkNoYW5nZSk7XG5cdFx0dXIuYWN0aW9uKFwiZmlsZUJ1dHRvbkNoYW5nZUhpZGVcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZmlsZUJ1dHRvbkNoYW5nZUhpZGUsIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmZpbGVCdXR0b25DaGFuZ2VVbkhpZGUpO1xuXHRcdHVyLmFjdGlvbihcImZpbGVCdXR0b25DaGFuZ2VVbkhpZGVcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZmlsZUJ1dHRvbkNoYW5nZVVuSGlkZSwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZmlsZUJ1dHRvbkNoYW5nZUhpZGUpO1xuXG5cdFx0Ly91ci5hY3Rpb24oXCJleHBCdXR0b25VbmhpZGVcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuY2hhbmdlRXhwQnV0dG9uMiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZXhwQnV0dG9uSGlkZSk7XG5cdFx0Ly91ci5hY3Rpb24oXCJwYXJzZURhdGFcIiwgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucGFyc2VEYXRhLCB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVGaWxlKTtcblx0ICB9XG5cblx0XHRmdW5jdGlvbiBzaG93VG9vbHRpcChldmVudCkge1xuXHRcdFx0dmFyIG5vZGUgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuY3lUYXJnZXQ7XG5cblxuXHRcdFx0dmFyIGNhbkhhdmVUb29sdGlwID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmlzU0lGTm9kZShub2RlKSB8fCBub2RlLmRhdGEoXCJ0b29sdGlwXCIpICE9PW51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghY2FuSGF2ZVRvb2x0aXAobm9kZSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgcmVmOyAvLyB1c2VkIG9ubHkgZm9yIHBvc2l0aW9uaW5nXG5cdFx0XHR2YXIgcG9zID0gZXZlbnQucG9zaXRpb24gfHwgZXZlbnQuY3lQb3NpdGlvbjtcblx0XHRcdHZhciBwYW4gPSBjeS5wYW4oKTtcblx0XHRcdHZhciB6b29tID0gY3kuem9vbSgpO1xuXG5cdFx0XHR2YXIgaW5mb2JveCA9IGNsYXNzZXMuQXV4aWxpYXJ5VW5pdC5jaGVja1BvaW50KHBvcy54LCBwb3MueSwgbm9kZSwgMCk7XG5cdFx0XHR2YXIgdG9vbHRpcENvbnRlbnQ7XG5cblx0XHRcdFxuXHRcdFx0XHRpZiAoIWluZm9ib3gpIHtcblx0XHRcdFx0XHR0b29sdGlwQ29udGVudCA9IG5vZGUuZGF0YSgndG9vbHRpcCcpO1x0XHRcdFx0XHRcblx0XHRcdFx0XHRpZiAoIHRvb2x0aXBDb250ZW50ID09IHVuZGVmaW5lZCAgfHwgdG9vbHRpcENvbnRlbnQgPT0gJycpIHtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZWYgPSBub2RlLnBvcHBlclJlZigpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRvb2x0aXBDb250ZW50ID0gaW5mb2JveFsndG9vbHRpcCddO1xuXG5cdFx0XHRcdFx0aWYgKCB0b29sdGlwQ29udGVudCA9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG1vZGVsUG9zID0gY2xhc3Nlcy5BdXhpbGlhcnlVbml0LmdldEFic29sdXRlQ29vcmQoaW5mb2JveCwgY3kpO1xuXHRcdFx0XHRcdHZhciBtb2RlbFcgPSBpbmZvYm94LmJib3gudztcblx0XHRcdFx0XHR2YXIgbW9kZWxIID0gaW5mb2JveC5iYm94Lmg7XG5cdFx0XHRcdFx0dmFyIHJlbmRlcmVkVyA9IG1vZGVsVyAqIHpvb207XG5cdFx0XHRcdFx0dmFyIHJlbmRlcmVkSCA9IG1vZGVsSCAqIHpvb207XG5cdFx0XHRcdFx0bW9kZWxQb3MueCAtPSBtb2RlbFcgLyAyO1xuXHRcdFx0XHRcdG1vZGVsUG9zLnkgLT0gbW9kZWxIIC8gMjtcblx0XHRcdFx0XHR2YXIgcmVuZGVyZWRQb3MgPSBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb1JlbmRlcmVkUG9zaXRpb24obW9kZWxQb3MsIHBhbiwgem9vbSk7XG5cblx0XHRcdFx0XHR2YXIgcmVuZGVyZWREaW1zID0geyB3OiByZW5kZXJlZFcsIGg6IHJlbmRlcmVkSCB9O1xuXG5cdFx0XHRcdFx0cmVmID0gbm9kZS5wb3BwZXJSZWYoe1xuXHRcdFx0XHRcdFx0cmVuZGVyZWRQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZW5kZXJlZFBvcztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZW5kZXJlZERpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVuZGVyZWREaW1zO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcblxuXHRcdFx0dmFyIHBsYWNlbWVudCA9IGluZm9ib3ggPyBpbmZvYm94LmFuY2hvclNpZGUgOiAnYm90dG9tJztcblx0XHRcdHZhciBkZXN0cm95VGlwcHk7XG5cblx0XHRcdHZhciB0aXBweSA9IFRpcHB5Lm9uZShyZWYsIHtcblx0XHRcdFx0Y29udGVudDogKCgpID0+IHtcblx0XHRcdFx0XHR2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG5cdFx0XHRcdFx0Y29udGVudC5zdHlsZVsnZm9udC1zaXplJ10gPSAxMiAqIHpvb20gKyAncHgnO1xuXHRcdFx0XHRcdGNvbnRlbnQuaW5uZXJIVE1MID0gdG9vbHRpcENvbnRlbnQ7XG5cblx0XHRcdFx0XHRyZXR1cm4gY29udGVudDtcblx0XHRcdFx0fSkoKSxcblx0XHRcdFx0dHJpZ2dlcjogJ21hbnVhbCcsXG5cdFx0XHRcdGhpZGVPbkNsaWNrOiB0cnVlLFxuXHRcdFx0XHRhcnJvdzogdHJ1ZSxcblx0XHRcdFx0cGxhY2VtZW50LFxuXHRcdFx0XHRvbkhpZGRlbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0Y3kub2ZmKCdwYW4gem9vbScsIGRlc3Ryb3lUaXBweSk7XG5cdFx0XHRcdFx0bm9kZS5vZmYoJ3Bvc2l0aW9uJywgZGVzdHJveVRpcHB5KTtcblx0XHRcdFx0XHRjeS5vZmYoJ3RhcGRyYWcnLCBkZXN0cm95VGlwcHkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0ZGVzdHJveVRpcHB5ID0gZnVuY3Rpb24oKXtcblx0XHRcdFx0dGlwcHkuZGVzdHJveSgpO1xuXHRcdFx0fTtcblxuXHRcdFx0Y3kub24oJ3BhbiB6b29tJywgZGVzdHJveVRpcHB5KTtcblx0XHRcdG5vZGUub24oJ3Bvc2l0aW9uJywgZGVzdHJveVRpcHB5KTtcblx0XHRcdGN5Lm9uKCd0YXBkcmFnJywgZGVzdHJveVRpcHB5KTtcblxuXHRcdFx0c2V0VGltZW91dCggKCkgPT4gdGlwcHkuc2hvdygpLDI1MCApO1xuXHRcdH1cblxuXHQgIGZ1bmN0aW9uIGJpbmRDeUV2ZW50cygpIHtcblxuXHRcdFx0Y3kub24oJ3RhcGRyYWdvdmVyJywgJ25vZGUnLCBmdW5jdGlvbihldmVudCkge1xuXHRcdFx0XHR2YXIgd2FpdER1cmF0aW9uID0gMjAwO1xuXHRcdFx0XHR2YXIgbm9kZVRhcGRyYWdvdXQ7XG5cdFx0XHRcdHZhciBjdXJyRXZlbnQgPSBldmVudDtcblx0XHRcdFx0dmFyIG5vZGUgPSBjdXJyRXZlbnQudGFyZ2V0IHx8IGN1cnJFdmVudC5jeVRhcmdldDtcblx0XHRcdFx0dmFyIGluUXVldWUgPSB0cnVlO1xuXG5cdFx0XHRcdHZhciBjbGVhck5vZGVFdmVudCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggbm9kZVRhcGRyYWdvdXQgKSB7XG5cdFx0XHRcdFx0XHRub2RlLm9mZigndGFwZHJhZ291dCcsIG5vZGVUYXBkcmFnb3V0KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIG5vZGVUYXBkcmFnICkge1xuXHRcdFx0XHRcdFx0bm9kZS5vZmYoJ3RhcGRyYWcnLCBub2RlVGFwZHJhZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHZhciBnZXRTaG93VG9vbHRpcEFzeWNuID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c2hvd1Rvb2x0aXAoIGN1cnJFdmVudCApO1xuXHRcdFx0XHRcdFx0aW5RdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH0sIHdhaXREdXJhdGlvbiApO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHZhciBzaG93VG9vbHRpcEFzeWNuID0gZ2V0U2hvd1Rvb2x0aXBBc3ljbigpO1xuXG5cdFx0XHRcdG5vZGUub24oJ3RhcGRyYWdvdXQnLCBub2RlVGFwZHJhZ291dCA9IGZ1bmN0aW9uKGUpIHtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQoIHNob3dUb29sdGlwQXN5Y24gKTtcblx0XHRcdFx0XHRjbGVhck5vZGVFdmVudCgpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRub2RlLm9uKCd0YXBkcmFnJywgbm9kZVRhcGRyYWcgPSBmdW5jdGlvbihlKSB7XG5cdFx0XHRcdFx0Y3VyckV2ZW50ID0gZTtcblx0XHRcdFx0XHRpZiAoIWluUXVldWUpIHtcblx0XHRcdFx0XHRcdHNob3dUb29sdGlwQXN5Y24gPSBnZXRTaG93VG9vbHRpcEFzeWNuKCk7XG5cdFx0XHRcdFx0XHRpblF1ZXVlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0ICAgIGN5Lm9uKCd0YXBlbmQnLCAnbm9kZScsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuXHQgICAgfSk7XG5cblx0ICAgIGN5Lm9uKFwiZXhwYW5kY29sbGFwc2UuYmVmb3JlY29sbGFwc2VcIiwgXCJub2RlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICB2YXIgbm9kZSA9IHRoaXM7XG5cdCAgICAgIC8vVGhlIGNoaWxkcmVuIGluZm8gb2YgY29tcGxleCBub2RlcyBzaG91bGQgYmUgc2hvd24gd2hlbiB0aGV5IGFyZSBjb2xsYXBzZWRcblx0ICAgICAgaWYgKG5vZGUuX3ByaXZhdGUuZGF0YS5jbGFzcy5zdGFydHNXaXRoKFwiY29tcGxleFwiKSkge1xuXHQgICAgICAgIC8vVGhlIG5vZGUgaXMgYmVpbmcgY29sbGFwc2VkIHN0b3JlIGluZm9sYWJlbCB0byB1c2UgaXQgbGF0ZXJcblx0ICAgICAgICB2YXIgaW5mb0xhYmVsID0gZWxlbWVudFV0aWxpdGllcy5nZXRJbmZvTGFiZWwobm9kZSk7XG5cdCAgICAgICAgbm9kZS5fcHJpdmF0ZS5kYXRhLmluZm9MYWJlbCA9IGluZm9MYWJlbDtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIGN5Lm9uKFwiZXhwYW5kY29sbGFwc2UuYWZ0ZXJjb2xsYXBzZVwiLCBcIm5vZGVcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgIHZhciBub2RlID0gdGhpcztcblx0ICAgICAgLy8gVGhlIHdpZHRoIGFuZCBoZWlnaHQgb2YganVzdCBjb2xsYXBzZWQgbm9kZXMgc2hvdWxkIGJlIDM2LCBidXQgdGhleSBhcmUgc3VwcG9zZWQgdG8gYmUgcmVzaXphYmxlLiBUaGVyZWZvcmUsIHdlXG5cdCAgICAgIC8vIHNldCB0aGVpciBkYXRhKCdiYm94JykgYWNjb3JkaW5nbHkuIFdlIGRvIG5vdCBzdG9yZSB0aGVpciBleGlzdGluZyBiYm94LncgYW5kIGJib3guaCBiZWNhdXNlIHRoZXkgaGF2ZSBubyBzaWduaWZpY2FuY2UgZm9yIGNvbXBvdW5kcyAoZm9yIG5vdykuXG5cdCAgICAgIGN5LnN0YXJ0QmF0Y2goKTtcblx0ICAgICAgdmFyIGJib3ggPSBub2RlLmRhdGEoJ2Jib3gnKTtcblx0ICAgICAgYmJveC53ID0gMzY7XG5cdCAgICAgIGJib3guaCA9IDM2O1xuXHQgICAgICBub2RlLmRhdGEoJ2Jib3gnLCBiYm94KTtcblx0ICAgICAgY3kuZW5kQmF0Y2goKTtcblx0ICAgIH0pO1xuXG5cdCAgICBjeS5vbihcImV4cGFuZGNvbGxhcHNlLmJlZm9yZWV4cGFuZFwiLCBcIm5vZGVcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdCAgICAgIHZhciBub2RlID0gdGhpcztcblx0ICAgICAgbm9kZS5yZW1vdmVEYXRhKFwiaW5mb0xhYmVsXCIpO1xuXHQgICAgfSk7XG5cblx0ICAgIGN5Lm9uKFwiZXhwYW5kY29sbGFwc2UuYWZ0ZXJleHBhbmRcIiwgXCJub2RlXCIsIGZ1bmN0aW9uIChldmVudCkge1xuXHQgICAgICB2YXIgbm9kZSA9IHRoaXM7XG5cdCAgICAgIGN5Lm5vZGVzKCkudXBkYXRlQ29tcG91bmRCb3VuZHMoKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFvcHRpb25zLnJlY2FsY3VsYXRlT25Db21wbGV4aXR5TWFuYWdlbWVudCl7XG4gICAgICAgICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgICAgICAgfVxuXHQgICAgICAvL0Rvbid0IHNob3cgY2hpbGRyZW4gaW5mbyB3aGVuIHRoZSBjb21wbGV4IG5vZGUgaXMgZXhwYW5kZWRcblx0ICAgICAgaWYgKG5vZGUuX3ByaXZhdGUuZGF0YS5jbGFzcy5zdGFydHNXaXRoKFwiY29tcGxleFwiKSkge1xuXHQgICAgICAgIG5vZGUucmVtb3ZlU3R5bGUoJ2NvbnRlbnQnKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG4gICAgICBcbiAgICAgIGN5Lm9uKFwiYmVmb3JlRG9cIiwgZnVuY3Rpb24gKGUsIG5hbWUsIGFyZ3MpIHtcbiAgICAgICAgaWYobmFtZSA9PSBcImxheW91dFwiIHx8IG5hbWUgPT0gXCJjb2xsYXBzZVwiIHx8IG5hbWUgPT0gXCJleHBhbmRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VSZWN1cnNpdmVseVwiIHx8IG5hbWUgPT0gXCJleHBhbmRSZWN1cnNpdmVseVwiIFxuICAgICAgICAgIHx8IChuYW1lID09IFwiYmF0Y2hcIiAmJiAoYXJnc1swXVsnbmFtZSddID09IFwidGhpbkJvcmRlclwiIHx8IGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaWNrZW5Cb3JkZXJcIikpKXtcbiAgICAgICAgICB2YXIgcGFyZW50cyA9IGN5LmVsZW1lbnRzKFwiOnBhcmVudFwiKS5qc29ucygpOyAvLyBwYXJlbnQgbm9kZXNcbiAgICAgICAgICB2YXIgc2ltcGxlcyA9IGN5LmVsZW1lbnRzKCkubm90KFwiOnBhcmVudFwiKS5qc29ucygpOyAvLyBzaW1wbGUgbm9kZXMgYW5kIGVkZ2VzXG4gICAgICAgICAgdmFyIGFsbEVsZW1lbnRzID0gcGFyZW50cy5jb25jYXQoc2ltcGxlcyk7ICAvLyBhbGwgZWxlbWVudHNcbiAgICAgICAgICBhcmdzLmFsbEVsZW1lbnRzID0gYWxsRWxlbWVudHM7XG4gICAgICAgICAgdmFyIHBvcnRzID0ge307XG4gICAgICAgICAgY3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe1xuICAgICAgICAgICAgaWYoZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlUG9ydHMobm9kZSkpe1xuICAgICAgICAgICAgICBwb3J0c1tub2RlLmlkKCldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShub2RlLmRhdGEoXCJwb3J0c1wiKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFyZ3MucG9ydHMgPSBwb3J0cztcbiAgICAgICAgICBhcmdzLnZpZXdwb3J0ID0ge3BhbjogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjeS5wYW4oKSkpLCB6b29tOiBjeS56b29tKCl9O1xuICAgICAgICAgIGlmKG5hbWUgPT0gXCJsYXlvdXRcIilcbiAgICAgICAgICAgIG1haW5VdGlsaXRpZXMuYmVmb3JlUGVyZm9ybUxheW91dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY3kub24oXCJiZWZvcmVSZWRvXCIsIGZ1bmN0aW9uIChlLCBuYW1lLCBhcmdzKSB7XG4gICAgICAgIGlmKG5hbWUgPT0gXCJsYXlvdXRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VcIiB8fCBuYW1lID09IFwiZXhwYW5kXCIgfHwgbmFtZSA9PSBcImNvbGxhcHNlUmVjdXJzaXZlbHlcIiB8fCBuYW1lID09IFwiZXhwYW5kUmVjdXJzaXZlbHlcIiBcbiAgICAgICAgICB8fCAobmFtZSA9PSBcImJhdGNoXCIgJiYgKGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaW5Cb3JkZXJcIiB8fCBhcmdzWzBdWyduYW1lJ10gPT0gXCJ0aGlja2VuQm9yZGVyXCIpKSl7XG4gICAgICAgICAgdmFyIHBhcmVudHMgPSBjeS5lbGVtZW50cyhcIjpwYXJlbnRcIikuanNvbnMoKTsgLy8gcGFyZW50IG5vZGVzXG4gICAgICAgICAgdmFyIHNpbXBsZXMgPSBjeS5lbGVtZW50cygpLm5vdChcIjpwYXJlbnRcIikuanNvbnMoKTsgLy8gc2ltcGxlIG5vZGVzIGFuZCBlZGdlc1xuICAgICAgICAgIHZhciBhbGxFbGVtZW50cyA9IHBhcmVudHMuY29uY2F0KHNpbXBsZXMpOyAgLy8gYWxsIGVsZW1lbnRzXG4gICAgICAgICAgYXJncy5hbGxFbGVtZW50czIgPSBhbGxFbGVtZW50cztcbiAgICAgICAgICB2YXIgcG9ydHMgPSB7fTtcbiAgICAgICAgICBjeS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICAgICAgICBpZihlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVQb3J0cyhub2RlKSl7XG4gICAgICAgICAgICAgIHBvcnRzW25vZGUuaWQoKV0gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vZGUuZGF0YShcInBvcnRzXCIpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXJncy5wb3J0czIgPSBwb3J0cztcbiAgICAgICAgICBhcmdzLnZpZXdwb3J0MiA9IHtwYW46IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3kucGFuKCkpKSwgem9vbTogY3kuem9vbSgpfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGN5Lm9uKFwiYWZ0ZXJEb1wiLCBmdW5jdGlvbiAoZSwgbmFtZSwgYXJncywgcmVzKSB7XG4gICAgICAgIGlmKG5hbWUgPT0gXCJsYXlvdXRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VcIiB8fCBuYW1lID09IFwiZXhwYW5kXCIgfHwgbmFtZSA9PSBcImNvbGxhcHNlUmVjdXJzaXZlbHlcIiB8fCBuYW1lID09IFwiZXhwYW5kUmVjdXJzaXZlbHlcIiBcbiAgICAgICAgICB8fCAobmFtZSA9PSBcImJhdGNoXCIgJiYgKGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaW5Cb3JkZXJcIiB8fCBhcmdzWzBdWyduYW1lJ10gPT0gXCJ0aGlja2VuQm9yZGVyXCIpKSl7XG4gICAgICAgICAgcmVzLmFsbEVsZW1lbnRzID0gYXJncy5hbGxFbGVtZW50cztcbiAgICAgICAgICByZXMucG9ydHMgPSBhcmdzLnBvcnRzO1xuICAgICAgICAgIHJlcy52aWV3cG9ydCA9IGFyZ3Mudmlld3BvcnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjeS5vbihcImFmdGVyUmVkb1wiLCBmdW5jdGlvbiAoZSwgbmFtZSwgYXJncywgcmVzKSB7XG4gICAgICAgIGlmKG5hbWUgPT0gXCJsYXlvdXRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VcIiB8fCBuYW1lID09IFwiZXhwYW5kXCIgfHwgbmFtZSA9PSBcImNvbGxhcHNlUmVjdXJzaXZlbHlcIiB8fCBuYW1lID09IFwiZXhwYW5kUmVjdXJzaXZlbHlcIiBcbiAgICAgICAgICB8fCAobmFtZSA9PSBcImJhdGNoXCIgJiYgKGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaW5Cb3JkZXJcIiB8fCBhcmdzWzBdWyduYW1lJ10gPT0gXCJ0aGlja2VuQm9yZGVyXCIpKSl7XG4gICAgICAgICAgcmVzLmFsbEVsZW1lbnRzID0gYXJncy5hbGxFbGVtZW50czI7XG4gICAgICAgICAgcmVzLnBvcnRzID0gYXJncy5wb3J0czI7XG4gICAgICAgICAgcmVzLnZpZXdwb3J0ID0gYXJncy52aWV3cG9ydDI7XG4gICAgICAgICAgY3kuanNvbih7ZmxhdEVsZXM6IHRydWUsIGVsZW1lbnRzOiBhcmdzLmFsbEVsZW1lbnRzfSk7XG4gICAgICAgICAgY3kuYmF0Y2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGN5Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgICAgICAgaWYoZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlUG9ydHMobm9kZSkpe1xuICAgICAgICAgICAgICAgIG5vZGUuZGF0YShcInBvcnRzXCIsIGFyZ3MucG9ydHNbbm9kZS5pZCgpXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGN5LnBhbihhcmdzLnZpZXdwb3J0W1wicGFuXCJdKTtcbiAgICAgICAgICBjeS56b29tKGFyZ3Mudmlld3BvcnRbXCJ6b29tXCJdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGN5Lm9uKFwiYmVmb3JlVW5kb1wiLCBmdW5jdGlvbiAoZSwgbmFtZSwgYXJncykge1xuICAgICAgICBpZihuYW1lID09IFwibGF5b3V0XCIgfHwgbmFtZSA9PSBcImNvbGxhcHNlXCIgfHwgbmFtZSA9PSBcImV4cGFuZFwiIHx8IG5hbWUgPT0gXCJjb2xsYXBzZVJlY3Vyc2l2ZWx5XCIgfHwgbmFtZSA9PSBcImV4cGFuZFJlY3Vyc2l2ZWx5XCIgXG4gICAgICAgICAgfHwgKG5hbWUgPT0gXCJiYXRjaFwiICYmIChhcmdzWzBdWyduYW1lJ10gPT0gXCJ0aGluQm9yZGVyXCIgfHwgYXJnc1swXVsnbmFtZSddID09IFwidGhpY2tlbkJvcmRlclwiKSkpe1xuICAgICAgICAgIHZhciBwYXJlbnRzID0gY3kuZWxlbWVudHMoXCI6cGFyZW50XCIpLmpzb25zKCk7IC8vIHBhcmVudCBub2Rlc1xuICAgICAgICAgIHZhciBzaW1wbGVzID0gY3kuZWxlbWVudHMoKS5ub3QoXCI6cGFyZW50XCIpLmpzb25zKCk7IC8vIHNpbXBsZSBub2RlcyBhbmQgZWRnZXNcbiAgICAgICAgICB2YXIgYWxsRWxlbWVudHMgPSBwYXJlbnRzLmNvbmNhdChzaW1wbGVzKTsgIC8vIGFsbCBlbGVtZW50c1xuICAgICAgICAgIGFyZ3MuYWxsRWxlbWVudHMyID0gYWxsRWxlbWVudHM7XG4gICAgICAgICAgdmFyIHBvcnRzID0ge307XG4gICAgICAgICAgY3kubm9kZXMoKS5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpe1xuICAgICAgICAgICAgaWYoZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlUG9ydHMobm9kZSkpe1xuICAgICAgICAgICAgICBwb3J0c1tub2RlLmlkKCldID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShub2RlLmRhdGEoXCJwb3J0c1wiKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGFyZ3MucG9ydHMyID0gcG9ydHM7XG4gICAgICAgICAgYXJncy52aWV3cG9ydDIgPSB7cGFuOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN5LnBhbigpKSksIHpvb206IGN5Lnpvb20oKX07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjeS5vbihcImFmdGVyVW5kb1wiLCBmdW5jdGlvbiAoZSwgbmFtZSwgYXJncywgcmVzKSB7XG4gICAgICAgIGlmKG5hbWUgPT0gXCJsYXlvdXRcIiB8fCBuYW1lID09IFwiY29sbGFwc2VcIiB8fCBuYW1lID09IFwiZXhwYW5kXCIgfHwgbmFtZSA9PSBcImNvbGxhcHNlUmVjdXJzaXZlbHlcIiB8fCBuYW1lID09IFwiZXhwYW5kUmVjdXJzaXZlbHlcIiBcbiAgICAgICAgICB8fCAobmFtZSA9PSBcImJhdGNoXCIgJiYgKGFyZ3NbMF1bJ25hbWUnXSA9PSBcInRoaW5Cb3JkZXJcIiB8fCBhcmdzWzBdWyduYW1lJ10gPT0gXCJ0aGlja2VuQm9yZGVyXCIpKSl7XG4gICAgICAgICAgcmVzLmFsbEVsZW1lbnRzID0gYXJncy5hbGxFbGVtZW50czI7XG4gICAgICAgICAgcmVzLnBvcnRzID0gYXJncy5wb3J0czI7XG4gICAgICAgICAgcmVzLnZpZXdwb3J0ID0gYXJncy52aWV3cG9ydDI7XG4gICAgICAgICAgY3kuanNvbih7ZmxhdEVsZXM6IHRydWUsIGVsZW1lbnRzOiBhcmdzLmFsbEVsZW1lbnRzfSk7XG4gICAgICAgICAgY3kuYmF0Y2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGN5Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihub2RlKXtcbiAgICAgICAgICAgICAgaWYoZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlUG9ydHMobm9kZSkpe1xuICAgICAgICAgICAgICAgIG5vZGUuZGF0YShcInBvcnRzXCIsIGFyZ3MucG9ydHNbbm9kZS5pZCgpXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGN5LnBhbihhcmdzLnZpZXdwb3J0W1wicGFuXCJdKTtcbiAgICAgICAgICBjeS56b29tKGFyZ3Mudmlld3BvcnRbXCJ6b29tXCJdKTsgICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG5cdCAgICBjeS5vbignbGF5b3V0c3RvcCcsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdFx0XHQvKlxuXHRcdFx0XHQqICdwcmVzZXQnIGxheW91dCBpcyBjYWxsZWQgdG8gZ2l2ZSB0aGUgaW5pdGlhbCBwb3NpdGlvbnMgb2Ygbm9kZXMgYnkgc2JnbnZpei5cblx0XHRcdFx0KiBTZWVtcyBsaWtlICdncmlkJyBsYXlvdXQgaXMgY2FsbGVkIGJ5IEN5dG9zY2FwZS5qcyBjb3JlIGluIGxvYWRpbmcgZ3JhcGhzLlxuXHRcdFx0XHQqIElmIHRoZSBsYXlvdXQgaXMgbm90IG9uZSBvZiB0aGVzZSAobm9ybWFsbHkgaXQgaXMgc3VwcG9zZWQgdG8gYmUgJ2Nvc2UtYmlsa2VudCcpXG5cdFx0XHRcdCogYW5kIHBvcnRzIGFyZSBlbmFibGVkIGNhbGwgJ2VsZW1lbnRVdGlsaXRpZXMuY2hhbmdlUG9ydHNPcmllbnRhdGlvbkFmdGVyTGF5b3V0KCknXG5cdFx0XHRcdCovXG5cdCAgICAgIGlmIChldmVudC5sYXlvdXQub3B0aW9ucy5uYW1lICE9PSAncHJlc2V0JyAmJiBldmVudC5sYXlvdXQub3B0aW9ucy5uYW1lICE9PSAnZ3JpZCcpXG5cdCAgICAgIHtcblx0ICAgICAgICBpZiAoZ3JhcGhVdGlsaXRpZXMucG9ydHNFbmFibGVkID09PSB0cnVlKVxuXHQgICAgICAgIHtcblx0ICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2hhbmdlUG9ydHNPcmllbnRhdGlvbkFmdGVyTGF5b3V0KCk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgJChkb2N1bWVudCkub24oJ3VwZGF0ZUdyYXBoRW5kJywgZnVuY3Rpb24oZXZlbnQsIF9jeSwgaXNMYXlvdXRSZXF1aXJlZCxjYWxsYmFjaykge1xuXG5cdFx0XHRcdC8vIGlmIHRoZSBldmVudCBpcyBub3QgdHJpZ2dlcmVkIGZvciB0aGlzIGN5IGluc3RhbmNlIHJldHVybiBkaXJlY3RseVxuXHRcdFx0XHRpZiAoIF9jeSAhPSBjeSApIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIHNldENvbXBvdW5kSW5mb2JveGVzID0gZnVuY3Rpb24obm9kZSwgaXNMYXlvdXRSZXF1aXJlZCxjeUluc3RhbmNlKXtcblx0XHRcdFx0XHRpZihjeUluc3RhbmNlID09IHVuZGVmaW5lZCApIHJldHVybjtcblx0XHRcdFx0XHRpZihub2RlLmRhdGEoKS5pbmZvYm94Q2FsY3VsYXRlZCl7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fWVsc2UgaWYobm9kZS5pc1BhcmVudCgpKXtcblx0XHRcdFx0XHRcdG5vZGUuY2hpbGRyZW4oKS5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkTm9kZSl7XG5cdFx0XHRcdFx0XHRcdHNldENvbXBvdW5kSW5mb2JveGVzKGNoaWxkTm9kZSxpc0xheW91dFJlcXVpcmVkLGN5SW5zdGFuY2UpO1xuXHRcdFx0XHRcdFx0fSk7XHRcdFx0XHRcdFx0XG5cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRub2RlLmRhdGEoXCJpbmZvYm94Q2FsY3VsYXRlZFwiLCB0cnVlKTtcblx0XHRcdFx0XHRub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJywge30pO1xuXHRcdFx0XHRcdC8vIGZvciBlYWNoIHN0YXRlc2FuZGluZm9zXG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGNvcnJlY3RJbmZvQm94Q29vcmQgPSB0cnVlO1xuXHRcdFx0XHRcdGZvcih2YXIgaT0wOyBpIDwgbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgc3RhdGVzYW5kaW5mb3MgPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJylbaV07XG5cdFx0XHRcdFx0XHR2YXIgYmJveCA9IHN0YXRlc2FuZGluZm9zLmJib3g7XG5cdFx0XHRcdFx0XHR2YXIgaW5mb0JveE9uTm9kZSA9IGNsYXNzZXMuQXV4aWxpYXJ5VW5pdC5zZXRBbmNob3JTaWRlKHN0YXRlc2FuZGluZm9zLCBub2RlKTtcblx0XHRcdFx0XHRcdGNvcnJlY3RJbmZvQm94Q29vcmQgPSBjb3JyZWN0SW5mb0JveENvb3JkICYmIGluZm9Cb3hPbk5vZGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHZhciBzdGF0ZXNUb0FkZCA9IFtdO1xuXHRcdFx0XHRcdGZvcih2YXIgaT0wOyBpIDwgbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIHN0YXRlc2FuZGluZm9zID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpW2ldO1xuXHRcdFx0XHRcdFx0dmFyIGJib3ggPSBzdGF0ZXNhbmRpbmZvcy5iYm94O1xuXHRcdFx0XHRcdFx0XG5cblx0XHRcdFx0XHRcdGlmICgoaXNMYXlvdXRSZXF1aXJlZCA9PT0gdW5kZWZpbmVkIHx8ICFpc0xheW91dFJlcXVpcmVkICkgJiYgY29ycmVjdEluZm9Cb3hDb29yZCkge1x0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcy5BdXhpbGlhcnlVbml0LnNldEFuY2hvclNpZGUoc3RhdGVzYW5kaW5mb3MsIG5vZGUpO1xuXHRcdFx0XHRcdFx0XHQvL3ZhciBmaWxlTG9hZFBhcmFtID0ge2V4dHJhUGFkZGluZzogIE51bWJlcihub2RlLmRhdGEoKS5vcmlnaW5hbFBhZGRpbmcpfTtcblx0XHRcdFx0XHRcdFx0dmFyIGNvcmRSZXN1bHQgPSBjbGFzc2VzLkF1eGlsaWFyeVVuaXQuY29udmVydFRvUmVsYXRpdmVDb29yZChzdGF0ZXNhbmRpbmZvcywgYmJveC54K2Jib3gudy8yLCBiYm94LnkrYmJveC5oLzIsIGN5SW5zdGFuY2UsIG5vZGUpXG5cdFx0XHRcdFx0XHRcdHN0YXRlc2FuZGluZm9zLmJib3gueCA9IGNvcmRSZXN1bHQueDtcblx0XHRcdFx0XHRcdFx0c3RhdGVzYW5kaW5mb3MuYmJveC55ID0gY29yZFJlc3VsdC55O1x0XG5cdFx0XHRcdFx0XHRcdHN0YXRlc2FuZGluZm9zLmlzRGlzcGxheWVkID0gdHJ1ZTtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBsb2NhdGlvbiA9IHN0YXRlc2FuZGluZm9zLmFuY2hvclNpZGU7IC8vIHRvcCBib3R0b20gcmlnaHQgbGVmdFxuXHRcdFx0XHRcdFx0XHR2YXIgbGF5b3V0cyA9IG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKTtcblx0XHRcdFx0XHRcdFx0aWYoIWxheW91dHNbbG9jYXRpb25dKSB7IC8vIGxheW91dCBkb2Vzbid0IGV4aXN0IHlldCBmb3IgdGhpcyBsb2NhdGlvblxuXHRcdFx0XHRcdFx0XHRcdGxheW91dHNbbG9jYXRpb25dID0gY2xhc3Nlcy5BdXhVbml0TGF5b3V0LmNvbnN0cnVjdChub2RlLCBsb2NhdGlvbik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gcG9wdWxhdGUgdGhlIGxheW91dCBvZiB0aGlzIHNpZGVcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcy5BdXhVbml0TGF5b3V0LmFkZEF1eFVuaXQobGF5b3V0c1tsb2NhdGlvbl0sIGN5SW5zdGFuY2UsIHN0YXRlc2FuZGluZm9zLCB1bmRlZmluZWQsIHRydWUpOyAvL3Bvc2l0aW9ucyBhcmUgcHJlY29tcHV0ZWRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZighbm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpKSB7IC8vIGVuc3VyZSBtaW5pbWFsIGluaXRpYWxpemF0aW9uXG5cdFx0XHRcdFx0XHRcdFx0bm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycsIHt9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgbG9jYXRpb24gPSBjbGFzc2VzLkF1eFVuaXRMYXlvdXQuc2VsZWN0TmV4dEF2YWlsYWJsZShub2RlLCBjeSk7XG5cdFx0XHRcdFx0XHRcdGlmKCFub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbG9jYXRpb25dKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW2xvY2F0aW9uXSA9IGNsYXNzZXMuQXV4VW5pdExheW91dC5jb25zdHJ1Y3Qobm9kZSwgbG9jYXRpb24pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHZhciBsYXlvdXQgPSBub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbG9jYXRpb25dO1xuXHRcdFx0XHRcdFx0XHRzdGF0ZXNhbmRpbmZvcy5hbmNob3JTaWRlID0gbG9jYXRpb247XG5cdFx0XHRcdFx0XHRcdHN3aXRjaChsb2NhdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJ0b3BcIjogc3RhdGVzYW5kaW5mb3MuYmJveC55ID0gMDsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcImJvdHRvbVwiOiBzdGF0ZXNhbmRpbmZvcy5iYm94LnkgPSAxMDA7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJsZWZ0XCI6IHN0YXRlc2FuZGluZm9zLmJib3gueCA9IDA7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJyaWdodFwiOiBzdGF0ZXNhbmRpbmZvcy5iYm94LnggPSAxMDA7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXMuQXV4VW5pdExheW91dC5hZGRBdXhVbml0KGxheW91dCwgY3lJbnN0YW5jZSwgc3RhdGVzYW5kaW5mb3MpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChpc0xheW91dFJlcXVpcmVkID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGxvY2F0aW9ucyA9IGNsYXNzZXMuQXV4VW5pdExheW91dC5jaGVja0ZpdChub2RlLCBjeSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGxvY2F0aW9ucyAhPT0gdW5kZWZpbmVkICYmIGxvY2F0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzc2VzLkF1eFVuaXRMYXlvdXQuZml0VW5pdHMobm9kZSwgY3ksIGxvY2F0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdH07XG5cdCAgICAgIC8vIGxpc3QgYWxsIGVudGl0eXR5cGVzIGFuZHN0b3JlIHRoZW0gaW4gdGhlIGdsb2JhbCBzY3JhdGNoXG5cdCAgICAgIC8vIG9ubHkgc3RhdGVmdWwgRVBOIChjb21wbGV4LCBtYWNyb21vbGVjdWxlIG9yIG51Y2xlaWMgYWNpZCkgYXJlIGNvbmNlcm5lZFxuXG5cdCAgICAgIC8vIGZvbGxvd2luZyBpcyB1bmFwcGxpZWQgZHVlIHRvIHBlcmZvcm1hbmNlIGRlY3JlYXNpbmcsIGFkZGluZyBzb21ldGhpbmcgbGlrZSAyMCUgdGltZSBvbiBsb2FkXG5cdCAgICAgIC8qY3kuc3RhcnRCYXRjaCgpO1xuXHQgICAgICB2YXIgZW50aXR5SGFzaCA9IHt9O1xuXHQgICAgICBjeS5ub2RlcyhcIltjbGFzcz0nY29tcGxleCddLCBbY2xhc3M9J21hY3JvbW9sZWN1bGUnXSwgW2NsYXNzPSdudWNsZWljIGFjaWQgZmVhdHVyZSddXCIpLmZvckVhY2goZnVuY3Rpb24obm9kZSkge1xuXHQgICAgICAgIC8vIGlkZW50aWZ5IGFuIGVudGl0eSBieSBpdHMgbGFiZWwgQU5EIGNsYXNzXG5cdCAgICAgICAgdmFyIGxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpO1xuXHQgICAgICAgIHZhciBfY2xhc3MgPSBub2RlLmRhdGEoJ2NsYXNzJyk7XG5cdCAgICAgICAgdmFyIGlkPWxhYmVsKyctJytfY2xhc3M7XG5cdCAgICAgICAgaWYoIWVudGl0eUhhc2guaGFzT3duUHJvcGVydHkoaWQpKSB7IC8vIGNyZWF0ZSBlbnRpdHl0eXBlIGlmIGRvZXNuJ3QgYWxyZWFkeSBleGlzdFxuXHQgICAgICAgICAgZW50aXR5SGFzaFtpZF0gPSBuZXcgY2xhc3Nlcy5FbnRpdHlUeXBlKGlkKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFyIGN1cnJlbnRFbnRpdHlUeXBlID0gZW50aXR5SGFzaFtpZF07XG5cdCAgICAgICAgY3VycmVudEVudGl0eVR5cGUuRVBOcy5wdXNoKG5vZGUpOyAvLyBhc3NpZ25lIHRoZSBjdXJyZW50IGVsZW1lbnQgdG8gaXRzIGNvcnJlc3BvbmRpbmcgZW50aXR5dHlwZVxuXG5cdCAgICAgICAgLy8gY29sbGVjdCBhbGwgc3RhdGVWYXJpYWJsZXMgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCwgd2UgbmVlZCB0byBhc3NpZ24gU3RhdGVWYXJpYWJsZURlZmluaXRpb25zIHRvIHRoZW1cblx0ICAgICAgICBmb3IodmFyIGk9MDsgaSA8IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5sZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgdmFyIHN0YXRlc2FuZGluZm9zID0gbm9kZS5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpW2ldO1xuXHQgICAgICAgICAgaWYoc3RhdGVzYW5kaW5mb3MgaW5zdGFuY2VvZiBjbGFzc2VzLlN0YXRlVmFyaWFibGUpIHsgLy8gc3RhdGVWYXJpYWJsZSBmb3VuZFxuXHQgICAgICAgICAgICB2YXIgY3VycmVudFN0YXRlVmFyaWFibGUgPSBzdGF0ZXNhbmRpbmZvcztcblx0ICAgICAgICAgICAgY3VycmVudEVudGl0eVR5cGUuYXNzaWduU3RhdGVWYXJpYWJsZShjdXJyZW50U3RhdGVWYXJpYWJsZSk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgICAgY3kuZW5kQmF0Y2goKTtcblx0ICAgICAgY3kuc2NyYXRjaCgnX3NiZ252aXonLCB7U0JHTkVudGl0eVR5cGVzOiBlbnRpdHlIYXNofSk7Ki9cblxuXHRcdCAgLy8gYXNzaWduIHN0YXRlc2FuZGluZm9zIHRvIHRoZWlyIGxheW91dFxuXHRcdCAgY3kuc3R5bGUoKS51cGRhdGUoKTtcblx0ICAgICAvLyBjeS5zdGFydEJhdGNoKCk7XG5cdCAgICAgIGN5Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7XG5cdCAgICAgICAgc2V0Q29tcG91bmRJbmZvYm94ZXMobm9kZSxpc0xheW91dFJlcXVpcmVkLGN5KTtcblx0XHQgIH0pO1xuXHRcdCAgXG5cdFx0ICBpZihjYWxsYmFjayl7XG5cdFx0XHQgIGNhbGxiYWNrKCk7XG5cdFx0ICB9XG5cblx0ICAgICAgLy9jeS5lbmRCYXRjaCgpO1xuXHQgICAgfSk7XG5cdCAgfVxuXG5cdCAgdmFyIHNlbGVjdGlvbkNvbG9yID0gJyNkNjc2MTQnO1xuXHQgIHZhciBzYmduU3R5bGVTaGVldCA9IGN5dG9zY2FwZS5zdHlsZXNoZWV0KClcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGVcIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAndGV4dC12YWxpZ24nOiAnY2VudGVyJyxcblx0ICAgICAgICAgICAgJ3RleHQtaGFsaWduJzogJ2NlbnRlcicsXG5cdCAgICAgICAgICAgICd0ZXh0LW9wYWNpdHknOiAxLFxuXHQgICAgICAgICAgICAnb3BhY2l0eSc6IDEsXG5cdCAgICAgICAgICAgICdwYWRkaW5nJzogMFxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGVbY2xhc3NdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3NoYXBlJzogZnVuY3Rpb24gKGVsZSkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldEN5U2hhcGUoZWxlKTtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ2NvbnRlbnQnOiBmdW5jdGlvbiAoZWxlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0RWxlbWVudENvbnRlbnQoZWxlKTtcblx0ICAgICAgICAgICAgfSxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6IGZ1bmN0aW9uIChlbGUpIHtcblx0XHRcdCAgICAgICAgICAvLyBJZiBub2RlIGxhYmVscyBhcmUgZXhwZWN0ZWQgdG8gYmUgYWRqdXN0ZWQgYXV0b21hdGljYWxseSBvciBlbGVtZW50IGNhbm5vdCBoYXZlIGxhYmVsXG5cdFx0XHQgICAgICAgICAgLy8gb3IgZWxlLmRhdGEoJ2ZvbnQtc2l6ZScpIGlzIG5vdCBkZWZpbmVkIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldExhYmVsVGV4dFNpemUoKVxuXHRcdFx0XHRcdFx0XHRcdC8vIGVsc2UgcmV0dXJuIGVsZS5kYXRhKCdmb250LXNpemUnKVxuXHRcdFx0ICAgICAgICAgIHZhciBvcHQgPSBvcHRpb25zLmFkanVzdE5vZGVMYWJlbEZvbnRTaXplQXV0b21hdGljYWxseTtcblx0XHRcdCAgICAgICAgICB2YXIgYWRqdXN0ID0gdHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdCgpIDogb3B0O1xuXG5cdFx0XHQgICAgICAgICAgaWYgKCFhZGp1c3QgJiYgZWxlLmRhdGEoJ2ZvbnQtc2l6ZScpICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0ICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCdmb250LXNpemUnKTtcblx0XHRcdCAgICAgICAgICB9XG5cblx0XHRcdCAgICAgICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5nZXRMYWJlbFRleHRTaXplKGVsZSk7XG5cdFx0XHQgICAgICAgIH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHQgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzXVtmb250LWZhbWlseV1cIilcblx0XHRcdCAgICAgIC5zdHlsZSh7XG5cdFx0XHQgICAgICAgICdmb250LWZhbWlseSc6IGZ1bmN0aW9uKCBlbGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZS5kYXRhKCdmb250LWZhbWlseScpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHQgICAgICB9KVxuXHRcdFx0ICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzc11bZm9udC1zdHlsZV1cIilcblx0XHRcdCAgICAgIC5zdHlsZSh7XG5cdFx0XHQgICAgICAgICdmb250LXN0eWxlJzogZnVuY3Rpb24oIGVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlLmRhdGEoJ2ZvbnQtc3R5bGUnKVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHQgICAgICB9KVxuXHRcdFx0ICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzc11bZm9udC13ZWlnaHRdXCIpXG5cdFx0XHQgICAgICAuc3R5bGUoe1xuXHRcdFx0ICAgICAgICAnZm9udC13ZWlnaHQnOiBmdW5jdGlvbiggZWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGUuZGF0YSgnZm9udC13ZWlnaHQnKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0ICAgICAgfSlcblx0XHRcdCAgICAgIC5zZWxlY3RvcihcIm5vZGVbY2xhc3NdW2NvbG9yXVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcblx0XHRcdCAgICAgICAgJ2NvbG9yJzogZnVuY3Rpb24oIGVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlLmRhdGEoJ2NvbG9yJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHQgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzXVtiYWNrZ3JvdW5kLWNvbG9yXVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcblx0XHRcdCAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBmdW5jdGlvbiggZWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGUuZGF0YSgnYmFja2dyb3VuZC1jb2xvcicpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHQgICAgICB9KVxuXHRcdFx0ICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzc11bYmFja2dyb3VuZC1vcGFjaXR5XVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcblx0XHRcdCAgICAgICAgJ2JhY2tncm91bmQtb3BhY2l0eSc6IGZ1bmN0aW9uKCBlbGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZS5kYXRhKCdiYWNrZ3JvdW5kLW9wYWNpdHknKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0ICAgICAgfSlcblx0XHRcdCAgICAgIC5zZWxlY3RvcihcIm5vZGVbY2xhc3NdW2JvcmRlci13aWR0aF1cIilcblx0XHRcdCAgICAgIC5zdHlsZSh7XG5cdFx0XHQgICAgICAgICdib3JkZXItd2lkdGgnOiBmdW5jdGlvbiggZWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGUuZGF0YSgnYm9yZGVyLXdpZHRoJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHQgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzXVtib3JkZXItY29sb3JdXCIpXG5cdFx0XHQgICAgICAuc3R5bGUoe1xuXHRcdFx0ICAgICAgICAnYm9yZGVyLWNvbG9yJzogZnVuY3Rpb24oIGVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlLmRhdGEoJ2JvcmRlci1jb2xvcicpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHQgICAgICB9KVxuXHRcdFx0ICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzc11bdGV4dC13cmFwXVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcbiAgICAgICAgICAgICAgJ3RleHQtd3JhcCc6IGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3B0ID0gb3B0aW9ucy5maXRMYWJlbHNUb05vZGVzO1xuICAgICAgICAgICAgICAgIHZhciBpc0ZpdCA9IHR5cGVvZiBvcHQgPT09ICdmdW5jdGlvbicgPyBvcHQoKSA6IG9wdDtcbiAgICAgICAgICAgICAgICBpZiAoaXNGaXQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAnZWxsaXBzaXMnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlLmRhdGEoJ3RleHQtd3JhcCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcbiAgICAgICAgICAgICAgJ3RleHQtbWF4LXdpZHRoJzogZnVuY3Rpb24gKGVsZSkge1xuICAgICAgICAgICAgICAgIHZhciBvcHQgPSBvcHRpb25zLmZpdExhYmVsc1RvTm9kZXM7XG4gICAgICAgICAgICAgICAgdmFyIGlzRml0ID0gdHlwZW9mIG9wdCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdCgpIDogb3B0O1xuICAgICAgICAgICAgICAgIGlmIChpc0ZpdCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZS53aWR0aCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJzEwMDBweCc7XG4gICAgICAgICAgICAgIH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHRcdFx0XHQuc2VsZWN0b3IoXCJlZGdlW2NsYXNzXVtsaW5lLWNvbG9yXVwiKVxuXHRcdFx0ICAgICAgLnN0eWxlKHtcblx0XHRcdCAgICAgICAgJ2xpbmUtY29sb3InOiBmdW5jdGlvbiggZWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBlbGUuZGF0YSgnbGluZS1jb2xvcicpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0ICAgICAgICAnc291cmNlLWFycm93LWNvbG9yJzogZnVuY3Rpb24oIGVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlLmRhdGEoJ2xpbmUtY29sb3InKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdCAgICAgICAgJ3RhcmdldC1hcnJvdy1jb2xvcic6IGZ1bmN0aW9uKCBlbGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZS5kYXRhKCdsaW5lLWNvbG9yJyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdCAgICAgIH0pXG5cdFx0XHQgICAgICAuc2VsZWN0b3IoXCJlZGdlW2NsYXNzXVt3aWR0aF1cIilcblx0XHRcdCAgICAgIC5zdHlsZSh7XG5cdFx0XHQgICAgICAgICd3aWR0aCc6IGZ1bmN0aW9uKCBlbGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGVsZS5kYXRhKCd3aWR0aCcpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHQgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzcz0nYXNzb2NpYXRpb24nXSxbY2xhc3M9J2Rpc3NvY2lhdGlvbiddLFtjbGFzcz0nYW5kJ10sW2NsYXNzPSdvciddLFtjbGFzcz0nbm90J10sW2NsYXNzPSdwcm9jZXNzJ10sW2NsYXNzPSdvbWl0dGVkIHByb2Nlc3MnXSxbY2xhc3M9J3VuY2VydGFpbiBwcm9jZXNzJ11cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnc2hhcGUtcG9seWdvbi1wb2ludHMnOiBmdW5jdGlvbihlbGUpIHtcblx0ICAgICAgICAgICAgICBpZiAoZ3JhcGhVdGlsaXRpZXMucG9ydHNFbmFibGVkID09PSB0cnVlICYmIGVsZS5kYXRhKCdwb3J0cycpLmxlbmd0aCA9PT0gMikge1xuXHQgICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIHBvcnRzIG9mIHRoZSBlZGdlIGFyZSBzeW1ldHJpYyBhY2NvcmRpbmcgdG8gdGhlIG5vZGUgY2VudGVyIHNvIGp1c3QgY2hlY2tpbmcgb25lIHBvcnQgaXMgZW5vdWdoIGZvciB1c1xuXHQgICAgICAgICAgICAgICAgdmFyIHBvcnQgPSBlbGUuZGF0YSgncG9ydHMnKVswXTtcblx0ICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwb3J0cyBhcmUgbG9jYXRlZCBhYm92ZS9iZWxvdyBvZiB0aGUgbm9kZSB0aGVuIHRoZSBvcmllbnRhdGlvbiBpcyAndmVydGljYWwnIGVsc2UgaXQgaXMgJ2hvcml6b250YWwnXG5cdCAgICAgICAgICAgICAgICB2YXIgb3JpZW50YXRpb24gPSBwb3J0LnggPT09IDAgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuXHQgICAgICAgICAgICAgICAgLy8gVGhlIGhhbGYgd2lkdGggb2YgdGhlIGFjdHVhbCBzaGFwZSBkaXNjbHVkaW5nIHRoZSBwb3J0c1xuXHQgICAgICAgICAgICAgICAgdmFyIHNoYXBlSFcgPSBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IDUwIC8gTWF0aC5hYnMocG9ydC55KSA6IDUwIC8gTWF0aC5hYnMocG9ydC54KTtcblx0ICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgY2xhc3Mgb2YgdGhlIG5vZGVcblx0ICAgICAgICAgICAgICAgIHZhciBfY2xhc3MgPSBlbGUuZGF0YSgnY2xhc3MnKTtcblx0ICAgICAgICAgICAgICAgIC8vIElmIGNsYXNzIGlzIG9uZSBvZiBwcm9jZXNzLCBvbWl0dGVkIHByb2Nlc3Mgb3IgdW5jZXJ0YWluIHByb2Nlc3MgdGhlbiB0aGUgdHlwZSBvZiBhY3R1YWwgc2hhcGUgaXMgJ3JlY3RhbmdsZScgZWxzZSBpdCBpcyAnY2lyY2xlJ1xuXHQgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBfY2xhc3MuZW5kc1dpdGgoJ3Byb2Nlc3MnKSA/ICdyZWN0YW5nbGUnIDogJ2NpcmNsZSc7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRlIGEgcG9seWdvbiBzdHJpbmcgd2l0aCBhYm92ZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gaXRcblx0ICAgICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0ZVNoYXBlV2l0aFBvcnRTdHJpbmcoMC4wMSwgc2hhcGVIVywgdHlwZSwgb3JpZW50YXRpb24pO1xuXHQgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgIC8vIFRoaXMgZWxlbWVudCBpcyBub3QgZXhwZWN0ZWQgdG8gaGF2ZSBhIHBveWdvbmlhbCBzaGFwZSAoQmVjYXVzZSBpdCBkb2VzIG5vdCBoYXZlIDIgcG9ydHMpIGp1c3QgcmV0dXJuIGEgdHJpdmlhbCBzdHJpbmcgaGVyZSBub3QgdG8gaGF2ZSBhIHJ1biB0aW1lIGJ1Z1xuXHQgICAgICAgICAgICAgIHJldHVybiAnLTEgLTEgMSAxIDEgMCc7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzPSdwZXJ0dXJiaW5nIGFnZW50J11cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnc2hhcGUtcG9seWdvbi1wb2ludHMnOiAnLTEsIC0xLCAgIC0wLjUsIDAsICAtMSwgMSwgICAxLCAxLCAgIDAuNSwgMCwgMSwgLTEnXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzcz0ndGFnJ11cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnc2hhcGUtcG9seWdvbi1wb2ludHMnOiAnLTEsIC0xLCAgIDAuMjUsIC0xLCAgIDEsIDAsICAgIDAuMjUsIDEsICAgIC0xLCAxJ1xuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6cGFyZW50W2NsYXNzXj0nY29tcGxleCddXCIpIC8vIHN0YXJ0IHdpdGggY29tcGxleFxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICd0ZXh0LXZhbGlnbic6ICdib3R0b20nLFxuXHQgICAgICAgICAgICAndGV4dC1oYWxpZ24nOiAnY2VudGVyJyxcblx0ICAgICAgICAgICAgJ3RleHQtbWFyZ2luLXknOiBlbGVtZW50VXRpbGl0aWVzLmdldENvbXBsZXhNYXJnaW4sXG5cdCAgICAgICAgICAgICdwYWRkaW5nJzogZWxlbWVudFV0aWxpdGllcy5nZXRDb21wbGV4UGFkZGluZyxcblx0ICAgICAgICAgICAgJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJyA6ICdleGNsdWRlJyxcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlW2NsYXNzPSdjb21wYXJ0bWVudCddXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3RleHQtdmFsaWduJzogJ2JvdHRvbScsXG5cdCAgICAgICAgICAgICd0ZXh0LWhhbGlnbic6ICdjZW50ZXInLFxuXHQgICAgICAgICAgICAndGV4dC1tYXJnaW4teScgOiAtMSAqIG9wdGlvbnMuZXh0cmFDb21wYXJ0bWVudFBhZGRpbmcsXG5cdCAgICAgICAgICAgICdjb21wb3VuZC1zaXppbmctd3J0LWxhYmVscycgOiAnZXhjbHVkZScsXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpwYXJlbnRbY2xhc3M9J2NvbXBhcnRtZW50J11cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAncGFkZGluZyc6IGZ1bmN0aW9uKCkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBncmFwaFV0aWxpdGllcy5nZXRDb21wb3VuZFBhZGRpbmdzKCkgKyBvcHRpb25zLmV4dHJhQ29tcGFydG1lbnRQYWRkaW5nO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZVtjbGFzcz0nc3VibWFwJ11cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAndGV4dC12YWxpZ24nOiAnYm90dG9tJyxcblx0ICAgICAgICAgICAgJ3RleHQtaGFsaWduJzogJ2NlbnRlcicsXG5cdCAgICAgICAgICAgICd0ZXh0LW1hcmdpbi15JyA6IC0xICogb3B0aW9ucy5leHRyYUNvbXBhcnRtZW50UGFkZGluZyxcblx0ICAgICAgICAgICAgJ2NvbXBvdW5kLXNpemluZy13cnQtbGFiZWxzJyA6ICdleGNsdWRlJyxcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlOnBhcmVudFtjbGFzcz0nc3VibWFwJ10sW2NsYXNzPSd0b3BvbG9neSBncm91cCddXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3BhZGRpbmcnOiBmdW5jdGlvbigpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gZ3JhcGhVdGlsaXRpZXMuZ2V0Q29tcG91bmRQYWRkaW5ncygpICsgb3B0aW9ucy5leHRyYUNvbXBhcnRtZW50UGFkZGluZztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6Y2hpbGRsZXNzW2Jib3hdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3dpZHRoJzogJ2RhdGEoYmJveC53KScsXG5cdCAgICAgICAgICAgICdoZWlnaHQnOiAnZGF0YShiYm94LmgpJ1xuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6cGFyZW50W21pbkhlaWdodF1cIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnbWluLWhlaWdodCc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIGlmIChncmFwaFV0aWxpdGllcy5jb21wb3VuZFNpemVzQ29uc2lkZXJlZCkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGVsZS5kYXRhKCdtaW5IZWlnaHQnKTtcblx0ICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6cGFyZW50W21pbkhlaWdodEJpYXNUb3BdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ21pbi1oZWlnaHQtYmlhcy10b3AnOiBmdW5jdGlvbihlbGUpIHtcblx0ICAgICAgICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChlbGUuZGF0YSgnbWluSGVpZ2h0Qmlhc1RvcCcpKTtcblx0ICAgICAgICAgICAgICByZXR1cm4gKG1pbiA+PSAwID8gbWluIDogMTAwKSArICclJztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6cGFyZW50W21pbkhlaWdodEJpYXNCb3R0b21dXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ21pbi1oZWlnaHQtYmlhcy1ib3R0b20nOiBmdW5jdGlvbihlbGUpIHtcblx0ICAgICAgICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChlbGUuZGF0YSgnbWluSGVpZ2h0Qmlhc0JvdHRvbScpKTtcblx0ICAgICAgICAgICAgICByZXR1cm4gKG1pbiA+PSAwID8gbWluIDogMTAwKSArICclJztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6cGFyZW50W21pbldpZHRoXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdtaW4td2lkdGgnOiBmdW5jdGlvbihlbGUpIHtcblx0ICAgICAgICAgICAgICBpZiAoZ3JhcGhVdGlsaXRpZXMuY29tcG91bmRTaXplc0NvbnNpZGVyZWQpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBlbGUuZGF0YSgnbWluV2lkdGgnKTtcblx0ICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICByZXR1cm4gMDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6cGFyZW50W21pbldpZHRoQmlhc0xlZnRdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ21pbi13aWR0aC1iaWFzLWxlZnQnOiBmdW5jdGlvbihlbGUpIHtcblx0ICAgICAgICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChlbGUuZGF0YSgnbWluV2lkdGhCaWFzTGVmdCcpKTtcblx0ICAgICAgICAgICAgICByZXR1cm4gKG1pbiA+PSAwID8gbWluIDogMTAwKSArICclJztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGU6cGFyZW50W21pbldpZHRoQmlhc1JpZ2h0XVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdtaW4td2lkdGgtYmlhcy1yaWdodCc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIHZhciBtaW4gPSBwYXJzZUZsb2F0KGVsZS5kYXRhKCdtaW5XaWR0aEJpYXNSaWdodCcpKTtcblx0ICAgICAgICAgICAgICByZXR1cm4gKG1pbiA+PSAwID8gbWluIDogMTAwKSArICclJztcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcIm5vZGUuY3ktZXhwYW5kLWNvbGxhcHNlLWNvbGxhcHNlZC1ub2RlXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ2JvcmRlci1zdHlsZSc6ICdkYXNoZWQnXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwibm9kZTpzZWxlY3RlZFwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdib3JkZXItY29sb3InOiBzZWxlY3Rpb25Db2xvcixcblx0ICAgICAgICAgICAgJ3RhcmdldC1hcnJvdy1jb2xvcic6ICcjMDAwJyxcblx0XHRcdFx0J3RleHQtb3V0bGluZS1jb2xvcic6ICcjMDAwJyxcblx0XHRcdFx0J2JvcmRlci13aWR0aCc6IGZ1bmN0aW9uKGVsZSl7XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KHBhcnNlRmxvYXQoZWxlLmRhdGEoJ2JvcmRlci13aWR0aCcpKSArIDIsIDMpO1xuXHRcdFx0XHQgIH1cblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJub2RlOmFjdGl2ZVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAwLjcsICdvdmVybGF5LWNvbG9yJzogc2VsZWN0aW9uQ29sb3IsXG5cdCAgICAgICAgICAgICdvdmVybGF5LXBhZGRpbmcnOiAnMTQnXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwiZWRnZVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdjdXJ2ZS1zdHlsZSc6ICdiZXppZXInLFxuXHQgICAgICAgICAgICAndGFyZ2V0LWFycm93LWZpbGwnOiBmdW5jdGlvbihlbGUpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZWxlbWVudFV0aWxpdGllcy5nZXRDeVRhcmdldEFycm93RmlsbChlbGUpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHQgICAgICAgICAgICAnc291cmNlLWFycm93LWZpbGwnOiAnaG9sbG93Jyxcblx0ICAgICAgICAgICAgJ3RleHQtYm9yZGVyLWNvbG9yJzogZnVuY3Rpb24gKGVsZSkge1xuXHQgICAgICAgICAgICAgIGlmIChlbGUuc2VsZWN0ZWQoKSkge1xuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGlvbkNvbG9yO1xuXHQgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICByZXR1cm4gZWxlLmNzcygnbGluZS1jb2xvcicpO1xuXHQgICAgICAgICAgICB9LFxuXHQgICAgICAgICAgICAnY29sb3InOiBmdW5jdGlvbiAoZWxlKSB7XG5cdCAgICAgICAgICAgICAgaWYgKGVsZS5zZWxlY3RlZCgpKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0aW9uQ29sb3I7XG5cdCAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIHJldHVybiBlbGUuY3NzKCdsaW5lLWNvbG9yJyk7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdhcnJvdy1zY2FsZSc6IDEuMjVcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJlZGdlLmN5LWV4cGFuZC1jb2xsYXBzZS1tZXRhLWVkZ2VcIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnbGluZS1jb2xvcic6ICcjQzRDNEM0Jyxcblx0ICAgICAgICAgICAgJ3NvdXJjZS1hcnJvdy1jb2xvcic6ICcjQzRDNEM0Jyxcblx0ICAgICAgICAgICAgJ3RhcmdldC1hcnJvdy1jb2xvcic6ICcjQzRDNEM0J1xuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcImVkZ2U6c2VsZWN0ZWRcIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnbGluZS1jb2xvcic6IHNlbGVjdGlvbkNvbG9yLFxuXHQgICAgICAgICAgICAnc291cmNlLWFycm93LWNvbG9yJzogc2VsZWN0aW9uQ29sb3IsXG5cdFx0XHRcdCd0YXJnZXQtYXJyb3ctY29sb3InOiBzZWxlY3Rpb25Db2xvcixcblx0XHRcdFx0J3dpZHRoJzogZnVuY3Rpb24oZWxlKXtcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgocGFyc2VGbG9hdChlbGUuZGF0YSgnd2lkdGgnKSkgKyAyLCAzKTtcblx0XHRcdFx0ICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwiZWRnZTphY3RpdmVcIilcblx0ICAgICAgICAgIC5jc3Moe1xuXHQgICAgICAgICAgICAnYmFja2dyb3VuZC1vcGFjaXR5JzogMC43LCAnb3ZlcmxheS1jb2xvcic6IHNlbGVjdGlvbkNvbG9yLFxuXHQgICAgICAgICAgICAnb3ZlcmxheS1wYWRkaW5nJzogJzgnXG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwiZWRnZVtjYXJkaW5hbGl0eSA+IDBdXCIpXG5cdCAgICAgICAgICAuY3NzKHtcblx0ICAgICAgICAgICAgJ3RleHQtcm90YXRpb24nOiAnYXV0b3JvdGF0ZScsXG5cdCAgICAgICAgICAgICd0ZXh0LWJhY2tncm91bmQtc2hhcGUnOiAncmVjdGFuZ2xlJyxcblx0ICAgICAgICAgICAgJ3RleHQtYm9yZGVyLW9wYWNpdHknOiAnMScsXG5cdCAgICAgICAgICAgICd0ZXh0LWJvcmRlci13aWR0aCc6ICcxJyxcblx0ICAgICAgICAgICAgJ3RleHQtYmFja2dyb3VuZC1jb2xvcic6ICd3aGl0ZScsXG5cdCAgICAgICAgICAgICd0ZXh0LWJhY2tncm91bmQtb3BhY2l0eSc6ICcxJ1xuXHQgICAgICAgICAgfSlcblx0ICAgICAgICAgIC5zZWxlY3RvcihcImVkZ2VbY2xhc3M9J2NvbnN1bXB0aW9uJ11bY2FyZGluYWxpdHkgPiAwXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdzb3VyY2UtbGFiZWwnOiBmdW5jdGlvbiAoZWxlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuICcnICsgZWxlLmRhdGEoJ2NhcmRpbmFsaXR5Jyk7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzb3VyY2UtdGV4dC1tYXJnaW4teSc6ICctMTAnLFxuXHQgICAgICAgICAgICAnc291cmNlLXRleHQtb2Zmc2V0JzogJzE4Jyxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMydcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJlZGdlW2NsYXNzPSdwcm9kdWN0aW9uJ11bY2FyZGluYWxpdHkgPiAwXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICd0YXJnZXQtbGFiZWwnOiBmdW5jdGlvbiAoZWxlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuICcnICsgZWxlLmRhdGEoJ2NhcmRpbmFsaXR5Jyk7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICd0YXJnZXQtdGV4dC1tYXJnaW4teSc6ICctMTAnLFxuXHQgICAgICAgICAgICAndGFyZ2V0LXRleHQtb2Zmc2V0JzogJzE4Jyxcblx0XHRcdFx0XHRcdFx0J2ZvbnQtc2l6ZSc6ICcxMydcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgICAuc2VsZWN0b3IoXCJlZGdlW2NsYXNzXVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICd0YXJnZXQtYXJyb3ctc2hhcGUnOiBmdW5jdGlvbiAoZWxlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q3lBcnJvd1NoYXBlKGVsZSk7XG5cdCAgICAgICAgICAgIH0sXG5cdCAgICAgICAgICAgICdzb3VyY2UtYXJyb3ctc2hhcGUnOiAnbm9uZScsXG5cdCAgICAgICAgICAgICdzb3VyY2UtZW5kcG9pbnQnOiBmdW5jdGlvbihlbGUpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5nZXRFbmRQb2ludChlbGUsICdzb3VyY2UnKTtcblx0ICAgICAgICAgICAgfSxcblx0ICAgICAgICAgICAgJ3RhcmdldC1lbmRwb2ludCc6IGZ1bmN0aW9uKGVsZSkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldEVuZFBvaW50KGVsZSwgJ3RhcmdldCcpO1xuXHQgICAgICAgICAgICB9LFxuXHRcdFx0XHRcdFx0XHQnbGluZS1zdHlsZSc6IGZ1bmN0aW9uIChlbGUpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudFV0aWxpdGllcy5nZXRBcnJheUxpbmVTdHlsZShlbGUpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9KVxuXHQgICAgICAgICAgLnNlbGVjdG9yKFwiY29yZVwiKVxuXHQgICAgICAgICAgLmNzcyh7XG5cdCAgICAgICAgICAgICdzZWxlY3Rpb24tYm94LWNvbG9yJzogc2VsZWN0aW9uQ29sb3IsXG5cdCAgICAgICAgICAgICdzZWxlY3Rpb24tYm94LW9wYWNpdHknOiAnMC4yJywgJ3NlbGVjdGlvbi1ib3gtYm9yZGVyLWNvbG9yJzogc2VsZWN0aW9uQ29sb3Jcblx0ICAgICAgICAgIH0pO1xuXG4gICAgdmFyIHNiZ25OZXR3b3JrQ29udGFpbmVyID0gJChvcHRpb25zLm5ldHdvcmtDb250YWluZXJTZWxlY3Rvcik7XG5cbiAgICAvLyBjcmVhdGUgYW5kIGluaXQgY3l0b3NjYXBlOlxuICAgIGN5dG9zY2FwZSh7XG4gICAgICBjb250YWluZXI6IHNiZ25OZXR3b3JrQ29udGFpbmVyLFxuICAgICAgc3R5bGU6IHNiZ25TdHlsZVNoZWV0LFxuICAgICAgc2hvd092ZXJsYXk6IGZhbHNlLCBtaW5ab29tOiAwLjEyNSwgbWF4Wm9vbTogMTYsXG4gICAgICBib3hTZWxlY3Rpb25FbmFibGVkOiB0cnVlLFxuICAgICAgbW90aW9uQmx1cjogdHJ1ZSxcbiAgICAgIHdoZWVsU2Vuc2l0aXZpdHk6IDAuMSxcbiAgICAgIHJlYWR5OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGN5ID0gdGhpcztcbiAgICAgICAgLy8gSWYgdW5kb2FibGUgcmVnaXN0ZXIgdW5kby9yZWRvIGFjdGlvbnNcbiAgICAgICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgICAgICByZWdpc3RlclVuZG9SZWRvQWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGJpbmRDeUV2ZW50cygpO1xuICAgICAgfVxuICAgIH0pO1xuXHR9O1xuXG5cdHNiZ25DeUluc3RhbmNlLmdldEN5ID0gZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBjeTtcblx0fTtcblxuXHRyZXR1cm4gc2JnbkN5SW5zdGFuY2U7XG59O1xuIiwiLypcbiAqIFJlbmRlciBzYmduIHNwZWNpZmljIHNoYXBlcyB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBieSBjeXRvc2NhcGUuanMgY29yZVxuICovXG5cbnZhciBsaWJzID0gcmVxdWlyZSgnLi4vdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMnKS5nZXRMaWJzKCk7XG52YXIgalF1ZXJ5ID0gJCA9IGxpYnMualF1ZXJ5O1xudmFyIGN5dG9zY2FwZSA9IGxpYnMuY3l0b3NjYXBlO1xuXG52YXIgY3lNYXRoID0gbWF0aCA9IGN5dG9zY2FwZS5tYXRoO1xudmFyIGN5QmFzZU5vZGVTaGFwZXMgPSBjeXRvc2NhcGUuYmFzZU5vZGVTaGFwZXM7XG52YXIgY3lTdHlsZVByb3BlcnRpZXMgPSBjeXRvc2NhcGUuc3R5bGVQcm9wZXJ0aWVzO1xuXG52YXIgY2xhc3NlcyA9IHJlcXVpcmUoJy4uL3V0aWxpdGllcy9jbGFzc2VzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgJCQgPSBjeXRvc2NhcGU7XG5cbiAgLypcbiAgKiBUYWtlbiBmcm9tIGN5dG9zY2FwZS5qcyBhbmQgbW9kaWZpZWQgc28gdGhhdCBpdCBjYW4gYmUgdXRpbGl6ZWQgZnJvbSBzYmdudml6XG4gICogaW4gYSBmbGV4YWJsZSB3YXkuIEl0IGlzIG5lZWRlZCBiZWNhdXNlIHRoZSBzYmdudml6IHNoYXBlcyB3b3VsZCBuZWVkIHRvIHN0cm9rZVxuICAqIGJvcmRlciBtb3JlIHRoYW4gb25jZSBhcyB0aGV5IHdvdWxkIGhhdmUgaW5mb2JveGVzLCBtdWx0aW1lcnMgZXRjLlxuICAqIEV4dGVuZHMgdGhlIHN0eWxlIHByb3BlcnRpZXMgb2Ygbm9kZSB3aXRoIHRoZSBnaXZlbiBvbmVzIHRoZW4gc3Ryb2tlcyB0aGUgYm9yZGVyLlxuICAqIFdvdWxkIG5lZWRlZCB0byBiZSBzbGlnaHRseSB1cGRhdGVkIGR1cmluZyBjeXRvc2NhcGUgdXBncmFkZXMgaWYgcmVsYXRlZCBmdW5jdGlvbiBpblxuICAqIEN5dG9zY2FwZS5qcyBpcyB1cGRhdGVkLiBJbmZvcm1hdGlvbiBhYm91dCB3aGVyZSBpcyB0aGUgcmVsYXRlZCBmdW5jdGlvbiBpcyBsb2NhdGVkXG4gICogY2FuIGJlIGZvdW5kIGluIHRoZSBmaWxlIHRoYXQgbGlzdCB0aGUgY2hhbmdlcyBkb25lIGluIGl2aXMgY3l0b3NjYXBlIGZvcmsuXG4gICovXG4gICQkLnNiZ24uZHJhd0JvcmRlciA9IGZ1bmN0aW9uKHsgY29udGV4dCwgbm9kZSwgYm9yZGVyV2lkdGgsIGJvcmRlckNvbG9yLCBib3JkZXJTdHlsZSwgYm9yZGVyT3BhY2l0eSB9KSB7XG5cbiAgICBib3JkZXJXaWR0aCA9IGJvcmRlcldpZHRoIHx8ICggbm9kZSAmJiBwYXJzZUZsb2F0KCBub2RlLmNzcyggJ2JvcmRlci13aWR0aCcgKSApICk7XG5cbiAgICBpZiggYm9yZGVyV2lkdGggPiAwICl7XG4gICAgICB2YXIgcGFyZW50T3BhY2l0eSA9ICggbm9kZSAmJiBub2RlLmVmZmVjdGl2ZU9wYWNpdHkoKSApIHx8IDE7XG5cbiAgICAgIGJvcmRlclN0eWxlID0gYm9yZGVyU3R5bGUgfHwgKCBub2RlICYmIG5vZGUuY3NzKCAnYm9yZGVyLXN0eWxlJyApICk7XG4gICAgICBib3JkZXJDb2xvciA9IGJvcmRlckNvbG9yIHx8ICggbm9kZSAmJiBub2RlLmNzcyggJ2JvcmRlci1jb2xvcicgKSApO1xuICAgICAgYm9yZGVyT3BhY2l0eSA9IChcbiAgICAgICAgICBib3JkZXJPcGFjaXR5IHx8ICggbm9kZSAmJiBub2RlLmNzcyggJ2JvcmRlci1vcGFjaXR5JyApIClcbiAgICAgICAgKSAqIHBhcmVudE9wYWNpdHk7XG5cbiAgICAgIHZhciBwcm9wc1RvUmVzdG9yZSA9IFsgJ2xpbmVXaWR0aCcsICdsaW5lQ2FwJywgJ3N0cm9rZVN0eWxlJywgJ2dsb2JhbEFscGhhJyBdO1xuICAgICAgdmFyIGluaXRpYWxQcm9wcyA9IHt9O1xuXG4gICAgICBwcm9wc1RvUmVzdG9yZS5mb3JFYWNoKCBmdW5jdGlvbiggcHJvcE5hbWUgKSB7XG4gICAgICAgIGluaXRpYWxQcm9wc1sgcHJvcE5hbWUgXSA9IGNvbnRleHRbIHByb3BOYW1lIF07XG4gICAgICB9ICk7XG5cbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gYm9yZGVyV2lkdGg7XG4gICAgICBjb250ZXh0LmxpbmVDYXAgPSAnYnV0dCc7XG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gYm9yZGVyQ29sb3I7XG4gICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gYm9yZGVyT3BhY2l0eTtcblxuICAgICAgaWYoIGNvbnRleHQuc2V0TGluZURhc2ggKXsgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgIHN3aXRjaCggYm9yZGVyU3R5bGUgKXtcbiAgICAgICAgICBjYXNlICdkb3R0ZWQnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCggWyAxLCAxIF0gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnZGFzaGVkJzpcbiAgICAgICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goIFsgNCwgMiBdICk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3NvbGlkJzpcbiAgICAgICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgICAgICAgY29udGV4dC5zZXRMaW5lRGFzaCggWyBdICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xuXG4gICAgICBpZiggYm9yZGVyU3R5bGUgPT09ICdkb3VibGUnICl7XG4gICAgICAgIGNvbnRleHQubGluZVdpZHRoID0gYm9yZGVyV2lkdGggLyAzO1xuXG4gICAgICAgIGxldCBnY28gPSBjb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbjtcbiAgICAgICAgY29udGV4dC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24tb3V0JztcblxuICAgICAgICBjb250ZXh0LnN0cm9rZSgpO1xuXG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gZ2NvO1xuICAgICAgfVxuXG4gICAgICAvLyByZXNldCBpbiBjYXNlIHdlIGNoYW5nZWQgdGhlIGJvcmRlciBzdHlsZVxuICAgICAgaWYoIGNvbnRleHQuc2V0TGluZURhc2ggKXsgLy8gZm9yIHZlcnkgb3V0b2ZkYXRlIGJyb3dzZXJzXG4gICAgICAgIGNvbnRleHQuc2V0TGluZURhc2goIFsgXSApO1xuICAgICAgfVxuXG4gICAgICBwcm9wc1RvUmVzdG9yZS5mb3JFYWNoKCBmdW5jdGlvbiggcHJvcE5hbWUgKSB7XG4gICAgICAgIGNvbnRleHRbIHByb3BOYW1lIF0gPSBpbml0aWFsUHJvcHNbIHByb3BOYW1lIF07XG4gICAgICB9ICk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFRha2VuIGZyb20gY3l0b3NjYXBlLmpzIGFuZCBtb2RpZmllZFxuICB2YXIgZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCA9ICQkLnNiZ24uZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCA9IGZ1bmN0aW9uKFxuICAgIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJhZGl1cyApe1xuXG4gICAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gICAgdmFyIGNvcm5lclJhZGl1cyA9IHJhZGl1cyB8fCBjeU1hdGguZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMoIHdpZHRoLCBoZWlnaHQgKTtcblxuICAgIGlmKCBjb250ZXh0LmJlZ2luUGF0aCApeyBjb250ZXh0LmJlZ2luUGF0aCgpOyB9XG5cbiAgICAvLyBTdGFydCBhdCB0b3AgbWlkZGxlXG4gICAgY29udGV4dC5tb3ZlVG8oIHgsIHkgLSBoYWxmSGVpZ2h0ICk7XG4gICAgLy8gQXJjIGZyb20gbWlkZGxlIHRvcCB0byByaWdodCBzaWRlXG4gICAgY29udGV4dC5hcmNUbyggeCArIGhhbGZXaWR0aCwgeSAtIGhhbGZIZWlnaHQsIHggKyBoYWxmV2lkdGgsIHksIGNvcm5lclJhZGl1cyApO1xuICAgIC8vIEFyYyBmcm9tIHJpZ2h0IHNpZGUgdG8gYm90dG9tXG4gICAgY29udGV4dC5hcmNUbyggeCArIGhhbGZXaWR0aCwgeSArIGhhbGZIZWlnaHQsIHgsIHkgKyBoYWxmSGVpZ2h0LCBjb3JuZXJSYWRpdXMgKTtcbiAgICAvLyBBcmMgZnJvbSBib3R0b20gdG8gbGVmdCBzaWRlXG4gICAgY29udGV4dC5hcmNUbyggeCAtIGhhbGZXaWR0aCwgeSArIGhhbGZIZWlnaHQsIHggLSBoYWxmV2lkdGgsIHksIGNvcm5lclJhZGl1cyApO1xuICAgIC8vIEFyYyBmcm9tIGxlZnQgc2lkZSB0byB0b3BCb3JkZXJcbiAgICBjb250ZXh0LmFyY1RvKCB4IC0gaGFsZldpZHRoLCB5IC0gaGFsZkhlaWdodCwgeCwgeSAtIGhhbGZIZWlnaHQsIGNvcm5lclJhZGl1cyApO1xuICAgIC8vIEpvaW4gbGluZVxuICAgIGNvbnRleHQubGluZVRvKCB4LCB5IC0gaGFsZkhlaWdodCApO1xuXG5cbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9O1xuICBcbiAgLy8gVGFrZW4gZnJvbSBjeXRvc2NhcGUuanNcbiAgdmFyIGRyYXdQb2x5Z29uUGF0aCA9IGZ1bmN0aW9uKFxuICAgIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHBvaW50cyApe1xuXG4gICAgdmFyIGhhbGZXID0gd2lkdGggLyAyO1xuICAgIHZhciBoYWxmSCA9IGhlaWdodCAvIDI7XG5cbiAgICBpZiggY29udGV4dC5iZWdpblBhdGggKXsgY29udGV4dC5iZWdpblBhdGgoKTsgfVxuXG4gICAgY29udGV4dC5tb3ZlVG8oIHggKyBoYWxmVyAqIHBvaW50c1swXSwgeSArIGhhbGZIICogcG9pbnRzWzFdICk7XG5cbiAgICBmb3IoIHZhciBpID0gMTsgaSA8IHBvaW50cy5sZW5ndGggLyAyOyBpKysgKXtcbiAgICAgIGNvbnRleHQubGluZVRvKCB4ICsgaGFsZlcgKiBwb2ludHNbIGkgKiAyXSwgeSArIGhhbGZIICogcG9pbnRzWyBpICogMiArIDFdICk7XG4gICAgfVxuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcbiAgfTtcbiAgXG4gIHZhciBzYmduU2hhcGVzID0gJCQuc2Jnbi5zYmduU2hhcGVzID0ge1xuICAgICdlbXB0eSBzZXQnOiB0cnVlLFxuICAgICdudWNsZWljIGFjaWQgZmVhdHVyZSc6IHRydWUsXG4gICAgJ2NvbXBsZXgnOiB0cnVlLFxuICAgICdtYWNyb21vbGVjdWxlJzogdHJ1ZSxcbiAgICAnc2ltcGxlIGNoZW1pY2FsJzogdHJ1ZSxcbiAgICAnYmlvbG9naWNhbCBhY3Rpdml0eSc6IHRydWUsXG4gICAgJ2NvbXBhcnRtZW50JzogdHJ1ZVxuICB9O1xuXG4gIHZhciB0b3RhbGx5T3ZlcnJpZGVuTm9kZVNoYXBlcyA9ICQkLnNiZ24udG90YWxseU92ZXJyaWRlbk5vZGVTaGFwZXMgPSB7XG4gICAgJ21hY3JvbW9sZWN1bGUnOiB0cnVlLFxuICAgICdudWNsZWljIGFjaWQgZmVhdHVyZSc6IHRydWUsXG4gICAgJ3NpbXBsZSBjaGVtaWNhbCc6IHRydWUsXG4gICAgJ2NvbXBsZXgnOiB0cnVlLFxuICAgICdiaW9sb2dpY2FsIGFjdGl2aXR5JzogdHJ1ZSxcbiAgICAnY29tcGFydG1lbnQnOiB0cnVlXG4gIH07XG5cbiAgdmFyIGNhbkhhdmVJbmZvQm94U2hhcGVzID0gJCQuc2Jnbi5jYW5IYXZlSW5mb0JveFNoYXBlcyA9IHtcbiAgICAnc2ltcGxlIGNoZW1pY2FsJzogdHJ1ZSxcbiAgICAnbWFjcm9tb2xlY3VsZSc6IHRydWUsXG4gICAgJ251Y2xlaWMgYWNpZCBmZWF0dXJlJzogdHJ1ZSxcbiAgICAnY29tcGxleCc6IHRydWUsXG4gICAgJ2Jpb2xvZ2ljYWwgYWN0aXZpdHknOiB0cnVlLFxuICAgICdjb21wYXJ0bWVudCc6IHRydWVcbiAgfTtcblxuICB2YXIgY2FuQmVNdWx0aW1lclNoYXBlcyA9ICQkLnNiZ24uY2FuQmVNdWx0aW1lclNoYXBlcyA9IHtcbiAgICAnbWFjcm9tb2xlY3VsZSc6IHRydWUsXG4gICAgJ2NvbXBsZXgnOiB0cnVlLFxuICAgICdudWNsZWljIGFjaWQgZmVhdHVyZSc6IHRydWUsXG4gICAgJ3NpbXBsZSBjaGVtaWNhbCc6IHRydWVcbiAgfTtcblxuICBjeU1hdGguY2FsY3VsYXRlRGlzdGFuY2UgPSBmdW5jdGlvbiAocG9pbnQxLCBwb2ludDIpIHtcbiAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnBvdyhwb2ludDFbMF0gLSBwb2ludDJbMF0sIDIpICsgTWF0aC5wb3cocG9pbnQxWzFdIC0gcG9pbnQyWzFdLCAyKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KGRpc3RhbmNlKTtcbiAgfTtcblxuICAkJC5zYmduLmNvbG9ycyA9IHtcbiAgICBjbG9uZTogXCIjODM4MzgzXCJcbiAgfTtcblxuICAkJC5zYmduLmdldERlZmF1bHRDb21wbGV4Q29ybmVyTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIDI0O1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd1N0YXRlQW5kSW5mb3MgPSBmdW5jdGlvbiAobm9kZSwgY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSkge1xuICAgIHZhciBsYXlvdXRzID0gbm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpO1xuXG4gICAgZm9yICh2YXIgc2lkZSBpbiBsYXlvdXRzKSB7XG4gICAgICB2YXIgbGF5b3V0ID0gbGF5b3V0c1tzaWRlXTtcbiAgICAgIGNsYXNzZXMuQXV4VW5pdExheW91dC5kcmF3KGxheW91dCwgbm9kZS5jeSgpLCBjb250ZXh0KTtcbiAgICB9XG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd0luZm9Cb3ggPSBmdW5jdGlvbihjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzaGFwZU5hbWUpIHtcbiAgICBzd2l0Y2ggKHNoYXBlTmFtZSkge1xuICAgICAgY2FzZSAncm91bmRyZWN0YW5nbGUnOlxuICAgICAgICBjeUJhc2VOb2RlU2hhcGVzWydyb3VuZHJlY3RhbmdsZSddLmRyYXcoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tcm91bmRyZWN0YW5nbGUnOlxuICAgICAgICAkJC5zYmduLmRyYXdCb3R0b21Sb3VuZFJlY3RhbmdsZShjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbGxpcHNlJzpcbiAgICAgICAgY3lCYXNlTm9kZVNoYXBlc1snZWxsaXBzZSddLmRyYXcoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29tcGxleCc6XG4gICAgICAgICQkLnNiZ24uZHJhd0NvbXBsZXgoIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGhlaWdodCAvIDIgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZXJ0dXJiaW5nIGFnZW50JzpcbiAgICAgICAgdmFyIHBvaW50cyA9ICQkLnNiZ24uZ2VuZXJhdGVQZXJ0dXJiaW5nQWdlbnRQb2ludHMoKTtcbiAgICAgICAgZHJhd1BvbHlnb25QYXRoKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHBvaW50cyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVjdGFuZ2xlJzpcbiAgICAgICAgY3lCYXNlTm9kZVNoYXBlc1sncmVjdGFuZ2xlJ10uZHJhdyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdGFkaXVtJzpcbiAgICAgICAgJCQuc2Jnbi5kcmF3Um91bmRSZWN0YW5nbGVQYXRoKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIE1hdGgubWluKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMiwgMTUpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9O1xuXG4gIC8vICQkLnNiZ24uQWZTaGFwZUFyZ3NGbiA9IGZ1bmN0aW9uIChzZWxmKXtcblx0Ly8gICByZXR1cm4gW3NlbGYuYmJveC53LCBzZWxmLmJib3guaCwgY2xhc3Nlcy5nZXRBdXhVbml0Q2xhc3Moc2VsZikuZ2V0UGFyZW50KHNlbGYpLmRhdGEoXCJjbGFzc1wiKV07XG4gIC8vIH1cblxuXG4gICQkLnNiZ24ubnVjbGVpY0FjaWRDaGVja1BvaW50ID0gZnVuY3Rpb24gKHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIHBvaW50cywgY29ybmVyUmFkaXVzKSB7XG5cbiAgICAvL2NoZWNrIHJlY3RhbmdsZSBhdCB0b3BcbiAgICBpZiAoY3lNYXRoLnBvaW50SW5zaWRlUG9seWdvbih4LCB5LCBwb2ludHMsXG4gICAgICAgICAgICBjZW50ZXJYLCBjZW50ZXJZIC0gY29ybmVyUmFkaXVzIC8gMiwgd2lkdGgsIGhlaWdodCAtIGNvcm5lclJhZGl1cyAvIDMsIFswLCAtMV0sXG4gICAgICAgICAgICBwYWRkaW5nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy9jaGVjayByZWN0YW5nbGUgYXQgYm90dG9tXG4gICAgaWYgKGN5TWF0aC5wb2ludEluc2lkZVBvbHlnb24oeCwgeSwgcG9pbnRzLFxuICAgICAgICAgICAgY2VudGVyWCwgY2VudGVyWSArIGhlaWdodCAvIDIgLSBjb3JuZXJSYWRpdXMgLyAyLCB3aWR0aCAtIDIgKiBjb3JuZXJSYWRpdXMsIGNvcm5lclJhZGl1cywgWzAsIC0xXSxcbiAgICAgICAgICAgIHBhZGRpbmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvL2NoZWNrIGVsbGlwc2VzXG4gICAgdmFyIGNoZWNrSW5FbGxpcHNlID0gZnVuY3Rpb24gKHgsIHksIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcpIHtcbiAgICAgIHggLT0gY2VudGVyWDtcbiAgICAgIHkgLT0gY2VudGVyWTtcblxuICAgICAgeCAvPSAod2lkdGggLyAyICsgcGFkZGluZyk7XG4gICAgICB5IC89IChoZWlnaHQgLyAyICsgcGFkZGluZyk7XG5cbiAgICAgIHJldHVybiAoTWF0aC5wb3coeCwgMikgKyBNYXRoLnBvdyh5LCAyKSA8PSAxKTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBib3R0b20gcmlnaHQgcXVhcnRlciBjaXJjbGVcbiAgICBpZiAoY2hlY2tJbkVsbGlwc2UoeCwgeSxcbiAgICAgICAgICAgIGNlbnRlclggKyB3aWR0aCAvIDIgLSBjb3JuZXJSYWRpdXMsXG4gICAgICAgICAgICBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNvcm5lclJhZGl1cyxcbiAgICAgICAgICAgIGNvcm5lclJhZGl1cyAqIDIsIGNvcm5lclJhZGl1cyAqIDIsIHBhZGRpbmcpKSB7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGJvdHRvbSBsZWZ0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgaWYgKGNoZWNrSW5FbGxpcHNlKHgsIHksXG4gICAgICAgICAgICBjZW50ZXJYIC0gd2lkdGggLyAyICsgY29ybmVyUmFkaXVzLFxuICAgICAgICAgICAgY2VudGVyWSArIGhlaWdodCAvIDIgLSBjb3JuZXJSYWRpdXMsXG4gICAgICAgICAgICBjb3JuZXJSYWRpdXMgKiAyLCBjb3JuZXJSYWRpdXMgKiAyLCBwYWRkaW5nKSkge1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy93ZSBuZWVkIHRvIGZvcmNlIG9wYWNpdHkgdG8gMSBzaW5jZSB3ZSBtaWdodCBoYXZlIHN0YXRlIGFuZCBpbmZvIGJveGVzLlxuICAvL2hhdmluZyBvcGFxdWUgbm9kZXMgd2hpY2ggaGF2ZSBzdGF0ZSBhbmQgaW5mbyBib3hlcyBnaXZlcyB1bnBsZWFzZW50IHJlc3VsdHMuXG4gICQkLnNiZ24uZm9yY2VPcGFjaXR5VG9PbmUgPSBmdW5jdGlvbiAobm9kZSwgY29udGV4dCkge1xuICAgIHZhciBwYXJlbnRPcGFjaXR5ID0gbm9kZS5lZmZlY3RpdmVPcGFjaXR5KCk7XG4gICAgaWYgKHBhcmVudE9wYWNpdHkgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IFwicmdiYShcIlxuICAgICAgICAgICAgKyBub2RlLl9wcml2YXRlLnN0eWxlW1wiYmFja2dyb3VuZC1jb2xvclwiXS52YWx1ZVswXSArIFwiLFwiXG4gICAgICAgICAgICArIG5vZGUuX3ByaXZhdGUuc3R5bGVbXCJiYWNrZ3JvdW5kLWNvbG9yXCJdLnZhbHVlWzFdICsgXCIsXCJcbiAgICAgICAgICAgICsgbm9kZS5fcHJpdmF0ZS5zdHlsZVtcImJhY2tncm91bmQtY29sb3JcIl0udmFsdWVbMl0gKyBcIixcIlxuICAgICAgICAgICAgKyAoMSAqIG5vZGUuY3NzKCdvcGFjaXR5JykgKiBwYXJlbnRPcGFjaXR5KSArIFwiKVwiO1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd1NpbXBsZUNoZW1pY2FsUGF0aCA9IGZ1bmN0aW9uIChcbiAgICAgICAgICBjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG5cbiAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcbiAgICAvL3ZhciBjb3JuZXJSYWRpdXMgPSAkJC5tYXRoLmdldFJvdW5kUmVjdGFuZ2xlUmFkaXVzKHdpZHRoLCBoZWlnaHQpO1xuICAgIHZhciBjb3JuZXJSYWRpdXMgPSBNYXRoLm1pbihoYWxmV2lkdGgsIGhhbGZIZWlnaHQpO1xuXG4gICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgIC8vIFN0YXJ0IGF0IHRvcCBtaWRkbGVcbiAgICBjb250ZXh0Lm1vdmVUbyh4LCB5LWhhbGZIZWlnaHQpO1xuICAgIC8vIEFyYyBmcm9tIG1pZGRsZSB0b3AgdG8gcmlnaHQgc2lkZVxuICAgIGNvbnRleHQuYXJjVG8oeCtoYWxmV2lkdGgsIHktaGFsZkhlaWdodCwgeCtoYWxmV2lkdGgsIHksIGNvcm5lclJhZGl1cyk7XG4gICAgLy8gQXJjIGZyb20gcmlnaHQgc2lkZSB0byBib3R0b21cbiAgICBjb250ZXh0LmFyY1RvKHgraGFsZldpZHRoLCB5K2hhbGZIZWlnaHQsIHgsIHkraGFsZkhlaWdodCwgY29ybmVyUmFkaXVzKTtcbiAgICAvLyBBcmMgZnJvbSBib3R0b20gdG8gbGVmdCBzaWRlXG4gICAgY29udGV4dC5hcmNUbyh4LWhhbGZXaWR0aCwgeStoYWxmSGVpZ2h0LCB4LWhhbGZXaWR0aCwgeSwgY29ybmVyUmFkaXVzKTtcbiAgICAvLyBBcmMgZnJvbSBsZWZ0IHNpZGUgdG8gdG9wQm9yZGVyXG4gICAgY29udGV4dC5hcmNUbyh4LWhhbGZXaWR0aCwgeS1oYWxmSGVpZ2h0LCB4LCB5LWhhbGZIZWlnaHQsIGNvcm5lclJhZGl1cyk7XG4gICAgLy8gSm9pbiBsaW5lXG4gICAgY29udGV4dC5saW5lVG8oeCwgeS1oYWxmSGVpZ2h0KTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG5cbiAgfTtcblxuICAkJC5zYmduLmRyYXdTaW1wbGVDaGVtaWNhbCA9IGZ1bmN0aW9uIChcbiAgICAgICAgICBjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgJCQuc2Jnbi5kcmF3U2ltcGxlQ2hlbWljYWxQYXRoKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHNpbXBsZUNoZW1pY2FsTGVmdENsb25lKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgd2lkdGgsIGhlaWdodCwgY2xvbmVNYXJrZXIsIG9wYWNpdHkpIHtcbiAgICBpZiAoY2xvbmVNYXJrZXIgIT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEdsb2JhbEFscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcGFjaXR5O1xuICAgICAgdmFyIG9sZFN0eWxlID0gY29udGV4dC5maWxsU3R5bGU7XG4gICAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICQkLnNiZ24uY29sb3JzLmNsb25lO1xuXG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgICB2YXIgbWFya2VyQmVnaW5YID0gY2VudGVyWCAtIHdpZHRoLzIgKiBNYXRoLnNpbihNYXRoLlBJIC8gMyk7XG4gICAgICB2YXIgbWFya2VyQmVnaW5ZID0gY2VudGVyWSArIGhlaWdodC8yICogTWF0aC5jb3MoTWF0aC5QSSAvIDMpO1xuICAgICAgdmFyIG1hcmtlckVuZFggPSBjZW50ZXJYO1xuICAgICAgdmFyIG1hcmtlckVuZFkgPSBtYXJrZXJCZWdpblk7XG5cbiAgICAgIGNvbnRleHQubW92ZVRvKG1hcmtlckJlZ2luWCwgbWFya2VyQmVnaW5ZKTtcbiAgICAgIGNvbnRleHQubGluZVRvKG1hcmtlckVuZFgsIG1hcmtlckVuZFkpO1xuICAgICAgY29udGV4dC5hcmMoY2VudGVyWCwgY2VudGVyWSwgd2lkdGgvMiwgMyAqIE1hdGguUEkgLyA2LCA1ICogTWF0aC5QSSAvIDYpO1xuXG4gICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gb2xkU3R5bGU7XG4gICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb2xkR2xvYmFsQWxwaGE7XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIHNpbXBsZUNoZW1pY2FsUmlnaHRDbG9uZShjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGNsb25lTWFya2VyLCBvcGFjaXR5KSB7XG4gICAgaWYgKGNsb25lTWFya2VyICE9IG51bGwpIHtcbiAgICAgIHZhciBvbGRHbG9iYWxBbHBoYSA9IGNvbnRleHQuZ2xvYmFsQWxwaGE7XG4gICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb3BhY2l0eTtcbiAgICAgIHZhciBvbGRTdHlsZSA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAkJC5zYmduLmNvbG9ycy5jbG9uZTtcblxuICAgICAgY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgdmFyIG1hcmtlckJlZ2luWCA9IGNlbnRlclg7XG4gICAgICB2YXIgbWFya2VyQmVnaW5ZID0gY2VudGVyWSArIGhlaWdodC8yICogTWF0aC5jb3MoTWF0aC5QSSAvIDMpO1xuICAgICAgdmFyIG1hcmtlckVuZFggPSBjZW50ZXJYICsgd2lkdGgvMiAqIE1hdGguc2luKE1hdGguUEkgLyAzKTtcbiAgICAgIHZhciBtYXJrZXJFbmRZID0gbWFya2VyQmVnaW5ZO1xuXG4gICAgICBjb250ZXh0Lm1vdmVUbyhtYXJrZXJCZWdpblgsIG1hcmtlckJlZ2luWSk7XG4gICAgICBjb250ZXh0LmxpbmVUbyhtYXJrZXJFbmRYLCBtYXJrZXJFbmRZKTtcbiAgICAgIGNvbnRleHQuYXJjKGNlbnRlclgsIGNlbnRlclksIHdpZHRoLzIsIE1hdGguUEkgLyA2LCAzICogTWF0aC5QSSAvIDYpO1xuXG4gICAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuXG4gICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gb2xkU3R5bGU7XG4gICAgICBjb250ZXh0Lmdsb2JhbEFscGhhID0gb2xkR2xvYmFsQWxwaGE7XG4gICAgfVxuICB9O1xuXG4gICQkLnNiZ24uZHJhd0VsbGlwc2VQYXRoID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjeUJhc2VOb2RlU2hhcGVzWydlbGxpcHNlJ10uZHJhd1BhdGgoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5kcmF3QmFycmVsID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjeUJhc2VOb2RlU2hhcGVzWydiYXJyZWwnXS5kcmF3KGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd0JvdHRvbVJvdW5kUmVjdGFuZ2xlID0gZnVuY3Rpb24gKGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjeUJhc2VOb2RlU2hhcGVzWydib3R0b21yb3VuZHJlY3RhbmdsZSddLmRyYXcoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gIH07XG5cbiAgLy8gVGhlIG9sZCBkcmF3IGltcGxlbWVudGF0aW9uIGZvciBudWNsZWljIGFjaWQgZmVhdHVyZVxuICAvLyBub3cgb25seSB1c2VkIGZvciBjbG9uZSBtYXJrZXIgZHJhd2luZyBvZiBudWNsZWljIGFjaWQgZmVhdHVyZVxuICAvLyBhbmQgbWFjcm9tb2xlY3VsZSBzaGFwZXMgYmVjYXVzZSAnYm90dG9tcm91bmRyZWN0YW5nbGUnIGZ1bmN0aW9uXG4gIC8vIG9mIGN5dG9zY2FwZS5qcyBkaWQgbm90IGZpdCB3ZWxsIGZvciB0aGlzIHB1cnBvc2UuXG4gIC8vIERpZCBub3QgY2hhbmdlIHRoZSBuYW1lIHlldCBkaXJlY3RseSBhcyBkcmF3TnVjQWNpZEZlYXR1cmVDbG9uZSBldGMuXG4gIC8vIGJlY2F1c2UgaXQgYWN0dWFsbHkgZHJhd3MgYSBudWNsZWljIGFjaWQgZmVhdHVyZSBpbiBhIGRpZmZlcmVudCB3YXkuXG4gICQkLnNiZ24uZHJhd051Y0FjaWRGZWF0dXJlMiA9IGZ1bmN0aW9uIChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cykge1xuICAgIGNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1cyB8fCBjeU1hdGguZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMod2lkdGgsIGhlaWdodCk7XG4gICAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG4gICAgdmFyIGxlZnQgPSBjZW50ZXJYIC0gaGFsZldpZHRoLCByaWdodCA9IGNlbnRlclggKyBoYWxmV2lkdGg7XG4gICAgdmFyIGJvdHRvbSA9IGNlbnRlclkgLSBoYWxmSGVpZ2h0LCB0b3AgPSBjZW50ZXJZICsgaGFsZkhlaWdodDtcbiAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuXG4gICAgY29udGV4dC5tb3ZlVG8obGVmdCwgYm90dG9tKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyaWdodCwgYm90dG9tKTtcbiAgICBjb250ZXh0LmxpbmVUbyhyaWdodCwgY2VudGVyWSk7XG4gICAgY29udGV4dC5hcmNUbyhyaWdodCwgdG9wLCBjZW50ZXJYLCB0b3AsIGNvcm5lclJhZGl1cyk7XG4gICAgY29udGV4dC5hcmNUbyhsZWZ0LCB0b3AsIGxlZnQsIGNlbnRlclksIGNvcm5lclJhZGl1cyk7XG4gICAgY29udGV4dC5saW5lVG8obGVmdCwgYm90dG9tKTtcblxuICAgIGNvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgY29udGV4dC5maWxsKCk7XG4gIH07XG5cbiAgLypcbiAgICogQ29kZSB0YWtlbiBmcm9tIGh0dHBzOi8vanNwZXJmLmNvbS9zdHJpbmctcHJvdG90eXBlLWVuZHN3aXRoXG4gICAqIERpcmVjdCBpbXBsZW1lbnRhdGlvbiBzZWVtcyB0byB3b3JrIGJldHRlci5cbiAgICogVXNpbmcgdGhpcyBpbXByb3ZlcyBpc011bHRpbWVyKCkgcGVyZm9ybWFuY2UuXG4gICAqIE1ha2VzIGl0IHRha2UgMC4xIG9yIDAuMiUgbGVzcyB0aW1lIGZyb20gdGhlIHdob2xlXG4gICAqIGxvYWRpbmcgcHJvY2VzcywgZG93biBmcm9tIH4wLjQlIGluaXRpYWxseS5cbiAgICovXG4gIGZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgcGF0dGVybikge1xuICAgIGZvciAodmFyIGkgPSBwYXR0ZXJuLmxlbmd0aCwgbCA9IHN0ci5sZW5ndGg7IGktLTspIHtcbiAgICAgIGlmIChzdHIuY2hhckF0KC0tbCkgIT0gcGF0dGVybi5jaGFyQXQoaSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gICQkLnNiZ24uaXNNdWx0aW1lciA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIHNiZ25DbGFzcyA9IG5vZGUuX3ByaXZhdGUuZGF0YS5jbGFzcztcbiAgICBpZiAoc2JnbkNsYXNzICYmIGVuZHNXaXRoKHNiZ25DbGFzcywgXCJtdWx0aW1lclwiKSlcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvL3RoaXMgZnVuY3Rpb24gaXMgY3JlYXRlZCB0byBoYXZlIHNhbWUgY29ybmVyIGxlbmd0aCB3aGVuXG4gIC8vY29tcGxleCdzIHdpZHRoIG9yIGhlaWdodCBpcyBjaGFuZ2VkXG4gICQkLnNiZ24uZ2VuZXJhdGVDb21wbGV4U2hhcGVQb2ludHMgPSBmdW5jdGlvbiAoY29ybmVyTGVuZ3RoLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgLy9jcCBzdGFuZHMgZm9yIGNvcm5lciBwcm9wb3J0aW9uXG4gICAgdmFyIGNwWCA9IE1hdGgubWluKGNvcm5lckxlbmd0aCwgMC41ICogd2lkdGgpIC8gd2lkdGg7XG4gICAgdmFyIGNwWSA9IE1hdGgubWluKGNvcm5lckxlbmd0aCwgMC41ICogaGVpZ2h0KSAvIGhlaWdodDtcblxuICAgIHZhciBjb21wbGV4UG9pbnRzID0gWy0xICsgY3BYLCAtMSwgLTEsIC0xICsgY3BZLCAtMSwgMSAtIGNwWSwgLTEgKyBjcFgsXG4gICAgICAxLCAxIC0gY3BYLCAxLCAxLCAxIC0gY3BZLCAxLCAtMSArIGNwWSwgMSAtIGNwWCwgLTFdO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhQb2ludHM7XG4gIH07XG5cbiAgJCQuc2Jnbi5nZW5lcmF0ZVBlcnR1cmJpbmdBZ2VudFBvaW50cyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBbLTEsIC0xLCAgIC0wLjUsIDAsICAtMSwgMSwgICAxLCAxLCAgIDAuNSwgMCwgMSwgLTFdO1xuICB9O1xuXG4gICQkLnNiZ24uZ2V0RGVmYXVsdE11bHRpbWVyUGFkZGluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiA1O1xuICB9O1xuXG4gIC8vIGRyYXcgYmFja2dyb3VuZCBpbWFnZSBvZiBub2Rlc1xuICAkJC5zYmduLmRyYXdJbWFnZSA9IGZ1bmN0aW9uKCBjb250ZXh0LCBpbWdPYmogKSB7XG4gICAgaWYoaW1nT2JqKXtcbiAgICAgIGNvbnRleHQuY2xpcCgpO1xuICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nT2JqLmltZywgMCwgMCwgaW1nT2JqLmltZ1csIGltZ09iai5pbWdILCBpbWdPYmoueCwgaW1nT2JqLnksIGltZ09iai53LCBpbWdPYmouaCApO1xuICAgICAgY29udGV4dC5yZXN0b3JlKCk7XG4gICAgfVxuICB9O1xuXG4gIGN5U3R5bGVQcm9wZXJ0aWVzLnR5cGVzLm5vZGVTaGFwZS5lbnVtcy5wdXNoKFxuICAgICdlbXB0eSBzZXQnLCAnbnVjbGVpYyBhY2lkIGZlYXR1cmUnLCAnY29tcGxleCcsICdtYWNyb21vbGVjdWxlJyxcbiAgICAnc2ltcGxlIGNoZW1pY2FsJywgJ2Jpb2xvZ2ljYWwgYWN0aXZpdHknLCAnY29tcGFydG1lbnQnXG4gICk7XG5cbiAgJCQuc2Jnbi5yZWdpc3RlclNiZ25Ob2RlU2hhcGVzID0gZnVuY3Rpb24gKCkge1xuXG4gICAgZnVuY3Rpb24gZ2VuZXJhdGVEcmF3RmNuKCB7IHBsYWluRHJhd0ZjbiwgZXh0cmFEcmF3RmNuLCBjYW5CZU11bHRpbWVyLCBjbG9uZU1hcmtlckZjbixcbiAgICAgIGNhbkhhdmVJbmZvQm94LCBtdWx0aW1lclBhZGRpbmcgfSApIHtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCBjb250ZXh0LCBub2RlLCBpbWdPYmogKSB7XG5cbiAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gcGFyc2VGbG9hdChub2RlLmNzcygnYm9yZGVyLXdpZHRoJykpO1xuICAgICAgICB2YXIgd2lkdGggPSBub2RlLm91dGVyV2lkdGgoKSAtIGJvcmRlcldpZHRoO1xuICAgICAgICB2YXIgaGVpZ2h0ID0gbm9kZS5vdXRlckhlaWdodCgpIC0gYm9yZGVyV2lkdGg7XG4gICAgICAgIHZhciBjZW50ZXJYID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi54O1xuICAgICAgICB2YXIgY2VudGVyWSA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueTtcbiAgICAgICAgdmFyIGJnT3BhY2l0eSA9IG5vZGUuY3NzKCdiYWNrZ3JvdW5kLW9wYWNpdHknKTtcbiAgICAgICAgdmFyIGlzQ2xvbmVkID0gY2xvbmVNYXJrZXJGY24gIT0gbnVsbCAmJiBub2RlLl9wcml2YXRlLmRhdGEuY2xvbmVtYXJrZXI7XG5cbiAgICAgICAgaWYgKCBjYW5CZU11bHRpbWVyICYmICQkLnNiZ24uaXNNdWx0aW1lciggbm9kZSApICkge1xuICAgICAgICAgIC8vYWRkIG11bHRpbWVyIHNoYXBlXG4gICAgICAgICAgcGxhaW5EcmF3RmNuKCBjb250ZXh0LCBjZW50ZXJYICsgbXVsdGltZXJQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgY2VudGVyWSArIG11bHRpbWVyUGFkZGluZywgd2lkdGgsIGhlaWdodCApO1xuXG4gICAgICAgICAgJCQuc2Jnbi5kcmF3Qm9yZGVyKCB7IGNvbnRleHQsIG5vZGUgfSApO1xuXG4gICAgICAgICAgaWYgKCBleHRyYURyYXdGY24gKSB7XG4gICAgICAgICAgICBleHRyYURyYXdGY24oIGNvbnRleHQsIGNlbnRlclggKyBtdWx0aW1lclBhZGRpbmcsXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlclkgKyBtdWx0aW1lclBhZGRpbmcsIHdpZHRoLCBoZWlnaHQgKTtcblxuXG4gICAgICAgICAgICAkJC5zYmduLmRyYXdCb3JkZXIoIHsgY29udGV4dCwgbm9kZSB9ICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCBpc0Nsb25lZCApIHtcbiAgICAgICAgICAgIGNsb25lTWFya2VyRmNuKGNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlclggKyBtdWx0aW1lclBhZGRpbmcsIGNlbnRlclkgKyBtdWx0aW1lclBhZGRpbmcsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoIC0gYm9yZGVyV2lkdGgsIGhlaWdodCAtIGJvcmRlcldpZHRoLCBpc0Nsb25lZCwgdHJ1ZSwgYmdPcGFjaXR5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwbGFpbkRyYXdGY24oIGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQgKTtcblxuICAgICAgICAkJC5zYmduLmRyYXdCb3JkZXIoIHsgY29udGV4dCwgbm9kZSB9ICk7XG4gICAgICAgICQkLnNiZ24uZHJhd0ltYWdlKCBjb250ZXh0LCBpbWdPYmogKTtcblxuICAgICAgICBpZiAoIGV4dHJhRHJhd0ZjbiApIHtcbiAgICAgICAgICAgIGV4dHJhRHJhd0ZjbiggY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCApO1xuXG4gICAgICAgICAgICAkJC5zYmduLmRyYXdCb3JkZXIoIHsgY29udGV4dCwgbm9kZSB9ICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIGlzQ2xvbmVkICkge1xuICAgICAgICAgIGNsb25lTWFya2VyRmNuKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksIHdpZHRoIC0gYm9yZGVyV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodCAtIGJvcmRlcldpZHRoLCBpc0Nsb25lZCwgZmFsc2UsIGJnT3BhY2l0eSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIGNhbkhhdmVJbmZvQm94ICkge1xuICAgICAgICAgIHZhciBvbGRTdHlsZSA9IGNvbnRleHQuZmlsbFN0eWxlO1xuICAgICAgICAgICQkLnNiZ24uZm9yY2VPcGFjaXR5VG9PbmUobm9kZSwgY29udGV4dCk7XG4gICAgICAgICAgJCQuc2Jnbi5kcmF3U3RhdGVBbmRJbmZvcyhub2RlLCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZKTtcbiAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IG9sZFN0eWxlO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlSW50ZXJzZWN0TGluZUZjbiggeyBwbGFpbkludGVyc2VjdExpbmVGY24sIGNhbkJlTXVsdGltZXIsIGNsb25lTWFya2VyRmNuLFxuICAgICAgY2FuSGF2ZUluZm9Cb3gsIG11bHRpbWVyUGFkZGluZyB9ICkge1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oIG5vZGUsIHgsIHkgKSB7XG4gICAgICAgIHZhciBib3JkZXJXaWR0aCA9IHBhcnNlRmxvYXQobm9kZS5jc3MoJ2JvcmRlci13aWR0aCcpKTtcbiAgICAgICAgdmFyIHBhZGRpbmcgPSBib3JkZXJXaWR0aCAvIDI7XG4gICAgICAgIHZhciB3aWR0aCA9IG5vZGUub3V0ZXJXaWR0aCgpIC0gYm9yZGVyV2lkdGg7XG4gICAgICAgIHZhciBoZWlnaHQgPSBub2RlLm91dGVySGVpZ2h0KCkgLSBib3JkZXJXaWR0aDtcbiAgICAgICAgdmFyIGNlbnRlclggPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLng7XG4gICAgICAgIHZhciBjZW50ZXJZID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi55O1xuXG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb25zID0gW107XG5cbiAgICAgICAgaWYgKCBjYW5IYXZlSW5mb0JveCApIHtcbiAgICAgICAgICB2YXIgc3RhdGVBbmRJbmZvSW50ZXJzZWN0TGluZXMgPSAkJC5zYmduLmludGVyc2VjdExpbmVTdGF0ZUFuZEluZm9Cb3hlcyhcbiAgICAgICAgICAgICAgICAgIG5vZGUsIHgsIHkpO1xuXG4gICAgICAgICAgaW50ZXJzZWN0aW9ucyA9IGludGVyc2VjdGlvbnMuY29uY2F0KCBzdGF0ZUFuZEluZm9JbnRlcnNlY3RMaW5lcyApO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGVJbnRlcnNlY3RMaW5lcyA9IHBsYWluSW50ZXJzZWN0TGluZUZjbihjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCxcbiAgICAgICAgICAgICAgICBoZWlnaHQsIHgsIHksIHBhZGRpbmcpO1xuXG4gICAgICAgIGludGVyc2VjdGlvbnMgPSBpbnRlcnNlY3Rpb25zLmNvbmNhdCggbm9kZUludGVyc2VjdExpbmVzICk7XG5cbiAgICAgICAgaWYgKCBjYW5CZU11bHRpbWVyICYmICQkLnNiZ24uaXNNdWx0aW1lcihub2RlKSApIHtcbiAgICAgICAgICB2YXIgbXVsdGltZXJJbnRlcnNlY3Rpb25MaW5lcyA9IHBsYWluSW50ZXJzZWN0TGluZUZjbihcbiAgICAgICAgICAgICAgICAgIGNlbnRlclggKyBtdWx0aW1lclBhZGRpbmcsIGNlbnRlclkgKyBtdWx0aW1lclBhZGRpbmcsIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nKTtcblxuICAgICAgICAgIGludGVyc2VjdGlvbnMgPSBpbnRlcnNlY3Rpb25zLmNvbmNhdCggbXVsdGltZXJJbnRlcnNlY3Rpb25MaW5lcyApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICQkLnNiZ24uY2xvc2VzdEludGVyc2VjdGlvblBvaW50KFt4LCB5XSwgaW50ZXJzZWN0aW9ucyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdlbmVyYXRlQ2hlY2tQb2ludEZjbiggeyBwbGFpbkNoZWNrUG9pbnRGY24sIGNhbkJlTXVsdGltZXIsIGNsb25lTWFya2VyRmNuLFxuICAgICAgY2FuSGF2ZUluZm9Cb3gsIG11bHRpbWVyUGFkZGluZyB9ICkge1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oIHgsIHksIG5vZGUsIHRocmVzaG9sZCApIHtcblxuICAgICAgICB0aHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgMDtcbiAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gcGFyc2VGbG9hdChub2RlLmNzcygnYm9yZGVyLXdpZHRoJykpO1xuICAgICAgICB2YXIgd2lkdGggPSBub2RlLm91dGVyV2lkdGgoKSAtIGJvcmRlcldpZHRoICsgMiAqIHRocmVzaG9sZDtcbiAgICAgICAgdmFyIGhlaWdodCA9IG5vZGUub3V0ZXJIZWlnaHQoKSAtIGJvcmRlcldpZHRoICsgMiAqIHRocmVzaG9sZDtcbiAgICAgICAgdmFyIGNlbnRlclggPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLng7XG4gICAgICAgIHZhciBjZW50ZXJZID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi55O1xuICAgICAgICB2YXIgcGFkZGluZyA9IGJvcmRlcldpZHRoIC8gMjtcblxuICAgICAgICB2YXIgbm9kZUNoZWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIHBsYWluQ2hlY2tQb2ludEZjbiggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBzdGF0ZUFuZEluZm9DaGVjayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBjYW5IYXZlSW5mb0JveCAmJiAkJC5zYmduLmNoZWNrUG9pbnRTdGF0ZUFuZEluZm9Cb3hlcyh4LCB5LCBub2RlLCB0aHJlc2hvbGQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBtdWx0aW1lckNoZWNrID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbkJlTXVsdGltZXIgJiYgJCQuc2Jnbi5pc011bHRpbWVyKG5vZGUpXG4gICAgICAgICAgICAgICAgICAmJiBwbGFpbkNoZWNrUG9pbnRGY24oIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJYICsgbXVsdGltZXJQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudGVyWSArIG11bHRpbWVyUGFkZGluZyApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBub2RlQ2hlY2soKSB8fCBzdGF0ZUFuZEluZm9DaGVjaygpIHx8IG11bHRpbWVyQ2hlY2soKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHNoYXBlTmFtZXMgPSBbIFwic2ltcGxlIGNoZW1pY2FsXCIsIFwibWFjcm9tb2xlY3VsZVwiLCBcImNvbXBsZXhcIixcbiAgICAgIFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIiwgXCJlbXB0eSBzZXRcIiwgXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCIsXG4gICAgICBcImNvbXBhcnRtZW50XCIsIFwib2xkQ29tcGFydG1lbnRcIlxuICAgIF07XG5cbiAgICBzaGFwZU5hbWVzLmZvckVhY2goIGZ1bmN0aW9uKCBzaGFwZU5hbWUgKSB7XG4gICAgICB2YXIgcGxhaW5EcmF3RmNuID0gJCQuc2Jnbi5wbGFpbkRyYXdbIHNoYXBlTmFtZSBdO1xuICAgICAgdmFyIHBsYWluSW50ZXJzZWN0TGluZUZjbiA9ICQkLnNiZ24ucGxhaW5JbnRlcnNlY3RMaW5lWyBzaGFwZU5hbWUgXTtcbiAgICAgIHZhciBwbGFpbkNoZWNrUG9pbnRGY24gPSAkJC5zYmduLnBsYWluQ2hlY2tQb2ludFsgc2hhcGVOYW1lIF07XG4gICAgICB2YXIgY2FuQmVNdWx0aW1lciA9ICQkLnNiZ24uY2FuQmVNdWx0aW1lclNoYXBlc1sgc2hhcGVOYW1lIF07XG4gICAgICB2YXIgY2xvbmVNYXJrZXJGY24gPSAkJC5zYmduLmNsb25lTWFya2VyWyBzaGFwZU5hbWUgXTtcbiAgICAgIHZhciBjYW5IYXZlSW5mb0JveCA9ICQkLnNiZ24uY2FuSGF2ZUluZm9Cb3hTaGFwZXNbIHNoYXBlTmFtZSBdO1xuICAgICAgdmFyIG11bHRpbWVyUGFkZGluZyA9ICQkLnNiZ24uZ2V0RGVmYXVsdE11bHRpbWVyUGFkZGluZygpO1xuICAgICAgdmFyIGV4dHJhRHJhd0ZjbiA9ICQkLnNiZ24uZXh0cmFEcmF3WyBzaGFwZU5hbWUgXTtcblxuICAgICAgdmFyIGRyYXcgPSBnZW5lcmF0ZURyYXdGY24oIHsgcGxhaW5EcmF3RmNuLCBjYW5CZU11bHRpbWVyLCBjbG9uZU1hcmtlckZjbixcbiAgICAgICAgY2FuSGF2ZUluZm9Cb3gsIG11bHRpbWVyUGFkZGluZywgZXh0cmFEcmF3RmNuXG4gICAgICB9ICk7XG5cbiAgICAgIHZhciBpbnRlcnNlY3RMaW5lID0gdG90YWxseU92ZXJyaWRlbk5vZGVTaGFwZXNbIHNoYXBlTmFtZSBdID9cbiAgICAgICAgZ2VuZXJhdGVJbnRlcnNlY3RMaW5lRmNuKCB7IHBsYWluSW50ZXJzZWN0TGluZUZjbiwgY2FuQmVNdWx0aW1lciwgY2xvbmVNYXJrZXJGY24sXG4gICAgICAgICAgY2FuSGF2ZUluZm9Cb3gsIG11bHRpbWVyUGFkZGluZ1xuICAgICAgICB9ICkgOiBwbGFpbkludGVyc2VjdExpbmVGY247XG5cbiAgICAgIHZhciBjaGVja1BvaW50ID0gdG90YWxseU92ZXJyaWRlbk5vZGVTaGFwZXNbIHNoYXBlTmFtZSBdID9cbiAgICAgICAgZ2VuZXJhdGVDaGVja1BvaW50RmNuKCB7IHBsYWluQ2hlY2tQb2ludEZjbiwgY2FuQmVNdWx0aW1lciwgY2xvbmVNYXJrZXJGY24sXG4gICAgICAgICAgY2FuSGF2ZUluZm9Cb3gsIG11bHRpbWVyUGFkZGluZ1xuICAgICAgICB9ICkgOiBwbGFpbkNoZWNrUG9pbnRGY247XG5cbiAgICAgIHZhciBzaGFwZSA9IHsgZHJhdywgaW50ZXJzZWN0TGluZSwgY2hlY2tQb2ludCwgbXVsdGltZXJQYWRkaW5nIH07XG5cbiAgICAgIGN5QmFzZU5vZGVTaGFwZXNbIHNoYXBlTmFtZSBdID0gc2hhcGU7XG4gICAgfSApO1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd0VsbGlwc2UgPSBmdW5jdGlvbiAoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICAgIC8vJCQuc2Jnbi5kcmF3RWxsaXBzZVBhdGgoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgLy9jb250ZXh0LmZpbGwoKTtcbiAgICBjeUJhc2VOb2RlU2hhcGVzWydlbGxpcHNlJ10uZHJhdyhjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcbiAgfTtcblxuICAkJC5zYmduLmRyYXdDb21wbGV4ID0gZnVuY3Rpb24oIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGNvcm5lckxlbmd0aCApIHtcbiAgICBjb3JuZXJMZW5ndGggPSBjb3JuZXJMZW5ndGggfHwgJCQuc2Jnbi5nZXREZWZhdWx0Q29tcGxleENvcm5lckxlbmd0aCgpO1xuICAgIHZhciBwb2ludHMgPSAkJC5zYmduLmdlbmVyYXRlQ29tcGxleFNoYXBlUG9pbnRzKGNvcm5lckxlbmd0aCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICBkcmF3UG9seWdvblBhdGgoY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcG9pbnRzKTtcblxuICAgIGNvbnRleHQuZmlsbCgpO1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd0Nyb3NzTGluZSA9IGZ1bmN0aW9uKCBjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuICAgIHZhciBwb2ludHMgPSBjeU1hdGguZ2VuZXJhdGVVbml0TmdvblBvaW50cyg0LCAwKTtcblxuICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgdmFyIHNjYWxlWCA9IHdpZHRoICogTWF0aC5zcXJ0KDIpIC8gMiwgc2NhbGVZID0gIGhlaWdodCAqIE1hdGguc3FydCgyKSAvIDI7XG5cbiAgICBjb250ZXh0Lm1vdmVUbyh4ICsgc2NhbGVYICogcG9pbnRzWzJdLCB5ICsgc2NhbGVZICogcG9pbnRzWzNdKTtcbiAgICBjb250ZXh0LmxpbmVUbyh4ICsgc2NhbGVYICogcG9pbnRzWzZdLCB5ICsgc2NhbGVZICogcG9pbnRzWzddKTtcbiAgICBjb250ZXh0LmNsb3NlUGF0aCgpO1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd0Jpb2xvZ2ljYWxBY3Rpdml0eSA9IGZ1bmN0aW9uKCBjb250ZXh0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0ICkge1xuICAgIHZhciBwb2ludHMgPSAkJC5zYmduLmdlbmVyYXRlQmlvbG9naWNhbEFjdGl2aXR5UG9pbnRzKCk7XG4gICAgZHJhd1BvbHlnb25QYXRoKGNvbnRleHQsXG4gICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBwb2ludHMpO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICB9O1xuXG4gICQkLnNiZ24uZHJhd1JvdW5kUmVjdGFuZ2xlID0gZnVuY3Rpb24oIGNvbnRleHQsIHgsIHksIHdpZHRoLCBoZWlnaHQgKSB7XG4gICAgZHJhd1JvdW5kUmVjdGFuZ2xlUGF0aCggY29udGV4dCwgeCwgeSwgd2lkdGgsIGhlaWdodCApO1xuICAgIGNvbnRleHQuZmlsbCgpO1xuICB9O1xuXG4gICQkLnNiZ24uZ2VuZXJhdGVOdWNsZWljQWNpZFBvaW50cyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjeU1hdGguZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKDQsIDApO1xuICB9O1xuXG4gICQkLnNiZ24uZ2VuZXJhdGVCaW9sb2dpY2FsQWN0aXZpdHlQb2ludHMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY3lNYXRoLmdlbmVyYXRlVW5pdE5nb25Qb2ludHNGaXRUb1NxdWFyZSg0LCAwKTtcbiAgfTtcblxuICAkJC5zYmduLmdlbmVyYXRlQ29tcGFydG1lbnRQb2ludHMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbWF0aC5nZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNCwgMCk7XG4gIH07XG5cbiAgJCQuc2Jnbi5wbGFpbkRyYXcgPSB7XG4gICAgXCJzaW1wbGUgY2hlbWljYWxcIjogJCQuc2Jnbi5kcmF3U2ltcGxlQ2hlbWljYWwsXG4gICAgXCJtYWNyb21vbGVjdWxlXCI6ICQkLnNiZ24uZHJhd1JvdW5kUmVjdGFuZ2xlLFxuICAgIFwiY29tcGxleFwiOiAkJC5zYmduLmRyYXdDb21wbGV4LFxuICAgIFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIjogJCQuc2Jnbi5kcmF3Qm90dG9tUm91bmRSZWN0YW5nbGUsXG4gICAgXCJlbXB0eSBzZXRcIjogJCQuc2Jnbi5kcmF3RWxsaXBzZSxcbiAgICBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjogJCQuc2Jnbi5kcmF3QmlvbG9naWNhbEFjdGl2aXR5LFxuICAgIFwiY29tcGFydG1lbnRcIjogJCQuc2Jnbi5kcmF3QmFycmVsLFxuICAgIFwib2xkQ29tcGFydG1lbnRcIjogJCQuc2Jnbi5kcmF3Um91bmRSZWN0YW5nbGVcbiAgfTtcblxuICAvLyBUbyBkZWZpbmUgYW4gZXh0cmEgZHJhd2luZyBmb3IgdGhlIG5vZGUgdGhhdCBpcyByZW5kZXJlZCBhdCB0aGUgdmVyeSBlbmQsXG4gIC8vIGV2ZW4gYWZ0ZXIgdGhlIG5vZGUgYmFja2dyb3VuZCBpbWFnZSBpcyBkcmF3bi5cbiAgLy8gRS5nLiBjcm9zcyBsaW5lcyBvZiBcImVtcHR5IHNldFwiIG5vZGVzLlxuICAkJC5zYmduLmV4dHJhRHJhdyA9IHtcbiAgICBcImVtcHR5IHNldFwiOiAkJC5zYmduLmRyYXdDcm9zc0xpbmVcbiAgfTtcblxuICAkJC5zYmduLnBsYWluSW50ZXJzZWN0TGluZSA9IHtcbiAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiBmdW5jdGlvbiggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApIHtcbiAgICAgIHJldHVybiBjeUJhc2VOb2RlU2hhcGVzW1wiZWxsaXBzZVwiXS5pbnRlcnNlY3RMaW5lKCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nICk7XG4gICAgfSxcbiAgICBcIm1hY3JvbW9sZWN1bGVcIjogZnVuY3Rpb24oIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcgKSB7XG4gICAgICByZXR1cm4gJCQuc2Jnbi5yb3VuZFJlY3RhbmdsZUludGVyc2VjdExpbmUoIHgsIHksIGNlbnRlclgsIGNlbnRlclksIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgIHdpZHRoLCBoZWlnaHQsXG4gICAgICAgIGN5TWF0aC5nZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KSwgcGFkZGluZ1xuICAgICAgKTtcbiAgICB9LFxuICAgIFwiY29tcGxleFwiOiBmdW5jdGlvbiggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApIHtcbiAgICAgIHZhciBwb2ludHMgPSAkJC5zYmduLmdlbmVyYXRlQ29tcGxleFNoYXBlUG9pbnRzKCAkJC5zYmduLmdldERlZmF1bHRDb21wbGV4Q29ybmVyTGVuZ3RoKCksIHdpZHRoLCBoZWlnaHQgKTtcbiAgICAgIHJldHVybiBjeU1hdGgucG9seWdvbkludGVyc2VjdExpbmUoXG4gICAgICAgIHgsIHksIHBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLyAyLCBoZWlnaHQgLyAyLCBwYWRkaW5nXG4gICAgICApO1xuICAgIH0sXG4gICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiBmdW5jdGlvbiggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApIHtcbiAgICAgIHJldHVybiBjeUJhc2VOb2RlU2hhcGVzW1wiYm90dG9tcm91bmRyZWN0YW5nbGVcIl0uaW50ZXJzZWN0TGluZSggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApO1xuICAgIH0sXG4gICAgXCJlbXB0eSBzZXRcIjogZnVuY3Rpb24oIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcgKSB7XG4gICAgICByZXR1cm4gY3lCYXNlTm9kZVNoYXBlc1tcImVsbGlwc2VcIl0uaW50ZXJzZWN0TGluZSggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApO1xuICAgIH0sXG4gICAgXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI6IGZ1bmN0aW9uKCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCBwYWRkaW5nICkge1xuICAgICAgdmFyIHBvaW50cyA9ICQkLnNiZ24uZ2VuZXJhdGVCaW9sb2dpY2FsQWN0aXZpdHlQb2ludHMoKTtcbiAgICAgIHJldHVybiBjeU1hdGgucG9seWdvbkludGVyc2VjdExpbmUoXG4gICAgICAgIHgsIHksIHBvaW50cywgY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLyAyLCBoZWlnaHQgLyAyLCBwYWRkaW5nXG4gICAgICApO1xuICAgIH0sXG4gICAgXCJjb21wYXJ0bWVudFwiOiBmdW5jdGlvbiggY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgcGFkZGluZyApIHtcbiAgICAgIHJldHVybiBjeUJhc2VOb2RlU2hhcGVzW1wiYmFycmVsXCJdLmludGVyc2VjdExpbmUoIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcgKTtcbiAgICB9LFxuICAgIFwib2xkQ29tcGFydG1lbnRcIjogZnVuY3Rpb24oIGNlbnRlclgsIGNlbnRlclksIHdpZHRoLCBoZWlnaHQsIHgsIHksIHBhZGRpbmcgKSB7XG4gICAgICByZXR1cm4gY3lNYXRoLnJvdW5kUmVjdGFuZ2xlSW50ZXJzZWN0TGluZShcbiAgICAgICAgeCwgeSwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZ1xuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgJCQuc2Jnbi5wbGFpbkNoZWNrUG9pbnQgPSB7XG4gICAgXCJzaW1wbGUgY2hlbWljYWxcIjogZnVuY3Rpb24oIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKSB7XG5cbiAgICAgIHZhciBwb2ludHMgPSBjeU1hdGguZ2VuZXJhdGVVbml0TmdvblBvaW50c0ZpdFRvU3F1YXJlKCA0LCAwICk7XG4gICAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgICAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuICAgIC8vdmFyIGNvcm5lclJhZGl1cyA9ICQkLm1hdGguZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMod2lkdGgsIGhlaWdodCk7XG4gICAgICB2YXIgY29ybmVyUmFkaXVzID0gTWF0aC5taW4oaGFsZldpZHRoLCBoYWxmSGVpZ2h0KTtcbiAgICAgIC8vdmFyIGNvcm5lclJhZGl1cyA9IG1hdGguZ2V0Um91bmRSZWN0YW5nbGVSYWRpdXMoIHdpZHRoLCBoZWlnaHQgKTtcbiAgICAgIHZhciBkaWFtID0gY29ybmVyUmFkaXVzICogMjtcblxuICAgICAgLy8gQ2hlY2sgaEJveFxuICAgICAgaWYoIGN5TWF0aC5wb2ludEluc2lkZVBvbHlnb24oIHgsIHksIHBvaW50cyxcbiAgICAgICAgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCAtIGRpYW0sIFswLCAtMV0sIHBhZGRpbmcgKSApe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgdkJveFxuICAgICAgaWYoIGN5TWF0aC5wb2ludEluc2lkZVBvbHlnb24oIHgsIHksIHBvaW50cyxcbiAgICAgICAgY2VudGVyWCwgY2VudGVyWSwgd2lkdGggLSBkaWFtLCBoZWlnaHQsIFswLCAtMV0sIHBhZGRpbmcgKSApe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgdG9wIGxlZnQgcXVhcnRlciBjaXJjbGVcbiAgICAgIGlmKCBjeU1hdGguY2hlY2tJbkVsbGlwc2UoIHgsIHksXG4gICAgICAgIGRpYW0sIGRpYW0sXG4gICAgICAgIGNlbnRlclggLSB3aWR0aCAvIDIgKyBjb3JuZXJSYWRpdXMsXG4gICAgICAgIGNlbnRlclkgLSBoZWlnaHQgLyAyICsgY29ybmVyUmFkaXVzLFxuICAgICAgICBwYWRkaW5nICkgKXtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgdG9wIHJpZ2h0IHF1YXJ0ZXIgY2lyY2xlXG4gICAgICBpZiggY3lNYXRoLmNoZWNrSW5FbGxpcHNlKCB4LCB5LFxuICAgICAgICBkaWFtLCBkaWFtLFxuICAgICAgICBjZW50ZXJYICsgd2lkdGggLyAyIC0gY29ybmVyUmFkaXVzLFxuICAgICAgICBjZW50ZXJZIC0gaGVpZ2h0IC8gMiArIGNvcm5lclJhZGl1cyxcbiAgICAgICAgcGFkZGluZyApICl7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGJvdHRvbSByaWdodCBxdWFydGVyIGNpcmNsZVxuICAgICAgaWYoIGN5TWF0aC5jaGVja0luRWxsaXBzZSggeCwgeSxcbiAgICAgICAgZGlhbSwgZGlhbSxcbiAgICAgICAgY2VudGVyWCArIHdpZHRoIC8gMiAtIGNvcm5lclJhZGl1cyxcbiAgICAgICAgY2VudGVyWSArIGhlaWdodCAvIDIgLSBjb3JuZXJSYWRpdXMsXG4gICAgICAgIHBhZGRpbmcgKSApe1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBib3R0b20gbGVmdCBxdWFydGVyIGNpcmNsZVxuICAgICAgaWYoIGN5TWF0aC5jaGVja0luRWxsaXBzZSggeCwgeSxcbiAgICAgICAgZGlhbSwgZGlhbSxcbiAgICAgICAgY2VudGVyWCAtIHdpZHRoIC8gMiArIGNvcm5lclJhZGl1cyxcbiAgICAgICAgY2VudGVyWSArIGhlaWdodCAvIDIgLSBjb3JuZXJSYWRpdXMsXG4gICAgICAgIHBhZGRpbmcgKSApe1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgLy9yZXR1cm4gY3lCYXNlTm9kZVNoYXBlc1tcImVsbGlwc2VcIl0uY2hlY2tQb2ludCggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApO1xuICAgIH0sXG4gICAgXCJtYWNyb21vbGVjdWxlXCI6IGZ1bmN0aW9uKCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICkge1xuICAgICAgcmV0dXJuIGN5QmFzZU5vZGVTaGFwZXNbXCJyb3VuZHJlY3RhbmdsZVwiXS5jaGVja1BvaW50KCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICk7XG4gICAgfSxcbiAgICBcImNvbXBsZXhcIjogZnVuY3Rpb24oIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKSB7XG4gICAgICB2YXIgcG9pbnRzID0gJCQuc2Jnbi5nZW5lcmF0ZUNvbXBsZXhTaGFwZVBvaW50cyggJCQuc2Jnbi5nZXREZWZhdWx0Q29tcGxleENvcm5lckxlbmd0aCgpLCB3aWR0aCwgaGVpZ2h0ICk7XG4gICAgICByZXR1cm4gY3lNYXRoLnBvaW50SW5zaWRlUG9seWdvbihcbiAgICAgICAgeCwgeSwgcG9pbnRzLCBjZW50ZXJYLCBjZW50ZXJZLCB3aWR0aCwgaGVpZ2h0LCBbMCwgLTFdLCBwYWRkaW5nKTtcbiAgICB9LFxuICAgIFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIjogZnVuY3Rpb24oIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKSB7XG4gICAgICByZXR1cm4gY3lCYXNlTm9kZVNoYXBlc1tcImJvdHRvbXJvdW5kcmVjdGFuZ2xlXCJdLmNoZWNrUG9pbnQoIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKTtcbiAgICB9LFxuICAgIFwiZW1wdHkgc2V0XCI6IGZ1bmN0aW9uKCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICkge1xuICAgICAgcmV0dXJuIGN5QmFzZU5vZGVTaGFwZXNbXCJlbGxpcHNlXCJdLmNoZWNrUG9pbnQoIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKTtcbiAgICB9LFxuICAgIFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiOiBmdW5jdGlvbiggeCwgeSwgcGFkZGluZywgd2lkdGgsIGhlaWdodCwgY2VudGVyWCwgY2VudGVyWSApIHtcbiAgICAgIHJldHVybiBjeUJhc2VOb2RlU2hhcGVzW1wicmVjdGFuZ2xlXCJdLmNoZWNrUG9pbnQoIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKTtcbiAgICB9LFxuICAgIFwiY29tcGFydG1lbnRcIjogZnVuY3Rpb24oIHgsIHksIHBhZGRpbmcsIHdpZHRoLCBoZWlnaHQsIGNlbnRlclgsIGNlbnRlclkgKSB7XG4gICAgICByZXR1cm4gY3lCYXNlTm9kZVNoYXBlc1tcImJhcnJlbFwiXS5jaGVja1BvaW50KCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICk7XG4gICAgfSxcbiAgICBcIm9sZENvbXBhcnRtZW50XCI6IGZ1bmN0aW9uKCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICkge1xuICAgICAgcmV0dXJuIGN5QmFzZU5vZGVTaGFwZXNbXCJyb3VuZHJlY3RhbmdsZVwiXS5jaGVja1BvaW50KCB4LCB5LCBwYWRkaW5nLCB3aWR0aCwgaGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZICk7XG4gICAgfVxuICB9O1xuXG4gICQkLnNiZ24uY2xvbmVNYXJrZXIgPSB7XG4gICAgXCJzaW1wbGUgY2hlbWljYWxcIjogZnVuY3Rpb24gKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBjbG9uZU1hcmtlciwgaXNNdWx0aW1lciwgb3BhY2l0eSkge1xuICAgICAgaWYgKGNsb25lTWFya2VyICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGNvcm5lclJhZGl1cyA9IE1hdGgubWluKHdpZHRoIC8gMiwgaGVpZ2h0IC8gMik7XG5cbiAgICAgICAgdmFyIGZpcnN0Q2lyY2xlQ2VudGVyWCA9IGNlbnRlclggLSB3aWR0aCAvIDIgKyBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHZhciBmaXJzdENpcmNsZUNlbnRlclkgPSBjZW50ZXJZO1xuICAgICAgICB2YXIgc2Vjb25kQ2lyY2xlQ2VudGVyWCA9IGNlbnRlclggKyB3aWR0aCAvIDIgLSBjb3JuZXJSYWRpdXM7XG4gICAgICAgIHZhciBzZWNvbmRDaXJjbGVDZW50ZXJZID0gY2VudGVyWTtcbiAgICAgICAgdmFyIGJvdHRvbUNpcmNsZUNlbnRlclggPSBjZW50ZXJYO1xuICAgICAgICB2YXIgYm90dG9tQ2lyY2xlQ2VudGVyWSA9IGNlbnRlclkgKyBoZWlnaHQvMiAtIGNvcm5lclJhZGl1cztcblxuICAgICAgICBpZiAod2lkdGggPCBoZWlnaHQpIHtcbiAgICAgICAgICBzaW1wbGVDaGVtaWNhbExlZnRDbG9uZShjb250ZXh0LCBib3R0b21DaXJjbGVDZW50ZXJYLCBib3R0b21DaXJjbGVDZW50ZXJZLFxuICAgICAgICAgICAgICAyICogY29ybmVyUmFkaXVzLCAyICogY29ybmVyUmFkaXVzLCBjbG9uZU1hcmtlciwgb3BhY2l0eSk7XG4gICAgICAgICAgc2ltcGxlQ2hlbWljYWxSaWdodENsb25lKGNvbnRleHQsIGJvdHRvbUNpcmNsZUNlbnRlclgsIGJvdHRvbUNpcmNsZUNlbnRlclksXG4gICAgICAgICAgICAgIDIgKiBjb3JuZXJSYWRpdXMsIDIgKiBjb3JuZXJSYWRpdXMsIGNsb25lTWFya2VyLCBvcGFjaXR5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBzaW1wbGVDaGVtaWNhbExlZnRDbG9uZShjb250ZXh0LCBmaXJzdENpcmNsZUNlbnRlclgsIGZpcnN0Q2lyY2xlQ2VudGVyWSxcbiAgICAgICAgICAgICAgMiAqIGNvcm5lclJhZGl1cywgMiAqIGNvcm5lclJhZGl1cywgY2xvbmVNYXJrZXIsIG9wYWNpdHkpO1xuICAgICAgICAgIHNpbXBsZUNoZW1pY2FsUmlnaHRDbG9uZShjb250ZXh0LCBzZWNvbmRDaXJjbGVDZW50ZXJYLCBzZWNvbmRDaXJjbGVDZW50ZXJZLFxuICAgICAgICAgICAgICAyICogY29ybmVyUmFkaXVzLCAyICogY29ybmVyUmFkaXVzLCBjbG9uZU1hcmtlciwgb3BhY2l0eSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb2xkU3R5bGUgPSBjb250ZXh0LmZpbGxTdHlsZTtcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAkJC5zYmduLmNvbG9ycy5jbG9uZTtcbiAgICAgICAgdmFyIG9sZEdsb2JhbEFscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9wYWNpdHk7XG5cbiAgICAgICAgdmFyIHJlY1BvaW50cyA9IGN5TWF0aC5nZW5lcmF0ZVVuaXROZ29uUG9pbnRzRml0VG9TcXVhcmUoNCwgMCk7XG4gICAgICAgIHZhciBjbG9uZVggPSBjZW50ZXJYO1xuICAgICAgICB2YXIgY2xvbmVZID0gY2VudGVyWSArIDMgLyA0ICogY29ybmVyUmFkaXVzO1xuICAgICAgICB2YXIgY2xvbmVXaWR0aCA9IHdpZHRoIC0gMiAqIGNvcm5lclJhZGl1cztcbiAgICAgICAgdmFyIGNsb25lSGVpZ2h0ID0gY29ybmVyUmFkaXVzIC8gMjtcblxuICAgICAgICBkcmF3UG9seWdvblBhdGgoY29udGV4dCwgY2xvbmVYLCBjbG9uZVksIGNsb25lV2lkdGgsIGNsb25lSGVpZ2h0LCByZWNQb2ludHMpO1xuICAgICAgICBjb250ZXh0LmZpbGwoKTtcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBvbGRTdHlsZTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9sZEdsb2JhbEFscGhhO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiBmdW5jdGlvbiAoY29udGV4dCwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGNsb25lTWFya2VyLCBpc011bHRpbWVyLCBvcGFjaXR5KSB7XG4gICAgICBpZiAoY2xvbmVNYXJrZXIgIT0gbnVsbCkge1xuICAgICAgICB2YXIgY2xvbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgICB2YXIgY2xvbmVIZWlnaHQgPSBoZWlnaHQgLyA0O1xuICAgICAgICB2YXIgY2xvbmVYID0gY2VudGVyWDtcbiAgICAgICAgdmFyIGNsb25lWSA9IGNlbnRlclkgKyAzICogaGVpZ2h0IC8gODtcblxuICAgICAgICB2YXIgb2xkU3R5bGUgPSBjb250ZXh0LmZpbGxTdHlsZTtcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAkJC5zYmduLmNvbG9ycy5jbG9uZTtcbiAgICAgICAgdmFyIG9sZEdsb2JhbEFscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9wYWNpdHk7XG5cbiAgICAgICAgdmFyIGNvcm5lclJhZGl1cyA9IGN5TWF0aC5nZXRSb3VuZFJlY3RhbmdsZVJhZGl1cyh3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICAkJC5zYmduLmRyYXdOdWNBY2lkRmVhdHVyZTIoY29udGV4dCwgY2xvbmVYLCBjbG9uZVksXG4gICAgICAgICAgICAgICAgY2xvbmVXaWR0aCwgY2xvbmVIZWlnaHQsIGNvcm5lclJhZGl1cyk7XG5cbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSBvbGRTdHlsZTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9sZEdsb2JhbEFscGhhO1xuICAgICAgfVxuICAgIH0sXG4gICAgXCJtYWNyb21vbGVjdWxlXCI6IGZ1bmN0aW9uIChjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgY2xvbmVNYXJrZXIsIGlzTXVsdGltZXIsIG9wYWNpdHkpIHtcbiAgICAgICQkLnNiZ24uY2xvbmVNYXJrZXJbXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiXShjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBjbG9uZU1hcmtlciwgaXNNdWx0aW1lciwgb3BhY2l0eSk7XG4gICAgfSxcbiAgICBcImNvbXBsZXhcIjogZnVuY3Rpb24gKGNvbnRleHQsIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBjbG9uZU1hcmtlciwgaXNNdWx0aW1lciwgb3BhY2l0eSkge1xuICAgICAgaWYgKGNsb25lTWFya2VyICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGNvcm5lckxlbmd0aCA9ICQkLnNiZ24uZ2V0RGVmYXVsdENvbXBsZXhDb3JuZXJMZW5ndGgoKTtcbiAgICAgICAgdmFyIGNwWCA9ICh3aWR0aCA+PSA1MCkgPyBjb3JuZXJMZW5ndGggLyB3aWR0aCA6IGNvcm5lckxlbmd0aCAvIDUwO1xuICAgICAgICB2YXIgY3BZID0gKGhlaWdodCA+PSA1MCkgPyBjb3JuZXJMZW5ndGggLyBoZWlnaHQgOiBjb3JuZXJMZW5ndGggLyA1MDtcbiAgICAgICAgdmFyIGNsb25lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgdmFyIGNsb25lSGVpZ2h0ID0gaGVpZ2h0ICogY3BZIC8gMjtcbiAgICAgICAgdmFyIGNsb25lWCA9IGNlbnRlclg7XG4gICAgICAgIHZhciBjbG9uZVkgPSBjZW50ZXJZICsgaGVpZ2h0IC8gMiAtIGNsb25lSGVpZ2h0IC8gMjtcblxuICAgICAgICB2YXIgbWFya2VyUG9pbnRzID0gWy0xLCAtMSwgMSwgLTEsIDEgLSBjcFgsIDEsIC0xICsgY3BYLCAxXTtcblxuICAgICAgICB2YXIgb2xkU3R5bGUgPSBjb250ZXh0LmZpbGxTdHlsZTtcbiAgICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAkJC5zYmduLmNvbG9ycy5jbG9uZTtcbiAgICAgICAgdmFyIG9sZEdsb2JhbEFscGhhID0gY29udGV4dC5nbG9iYWxBbHBoYTtcbiAgICAgICAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9wYWNpdHk7XG5cbiAgICAgICAgZHJhd1BvbHlnb25QYXRoKGNvbnRleHQsXG4gICAgICAgICAgICAgICAgY2xvbmVYLCBjbG9uZVksXG4gICAgICAgICAgICAgICAgY2xvbmVXaWR0aCwgY2xvbmVIZWlnaHQsIG1hcmtlclBvaW50cyk7XG4gICAgICAgIGNvbnRleHQuZmlsbCgpO1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gb2xkU3R5bGU7XG4gICAgICAgIGNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvbGRHbG9iYWxBbHBoYTtcblxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAkJC5zYmduLmNsb3Nlc3RJbnRlcnNlY3Rpb25Qb2ludCA9IGZ1bmN0aW9uIChwb2ludCwgaW50ZXJzZWN0aW9ucykge1xuICAgIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCA8PSAwKVxuICAgICAgcmV0dXJuIFtdO1xuXG4gICAgdmFyIGNsb3Nlc3RJbnRlcnNlY3Rpb24gPSBbXTtcbiAgICB2YXIgbWluRGlzdGFuY2UgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRlcnNlY3Rpb25zLmxlbmd0aDsgaSA9IGkgKyAyKSB7XG4gICAgICB2YXIgY2hlY2tQb2ludCA9IFtpbnRlcnNlY3Rpb25zW2ldLCBpbnRlcnNlY3Rpb25zW2kgKyAxXV07XG4gICAgICB2YXIgZGlzdGFuY2UgPSBjeU1hdGguY2FsY3VsYXRlRGlzdGFuY2UocG9pbnQsIGNoZWNrUG9pbnQpO1xuXG4gICAgICBpZiAoZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkge1xuICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBjbG9zZXN0SW50ZXJzZWN0aW9uID0gY2hlY2tQb2ludDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvc2VzdEludGVyc2VjdGlvbjtcbiAgfTtcblxuICAkJC5zYmduLm51Y2xlaWNBY2lkSW50ZXJzZWN0aW9uTGluZSA9IGZ1bmN0aW9uICh4LCB5LCBub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcGFkZGluZykge1xuICAgIC8vIHZhciBub2RlWCA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueDtcbiAgICAvLyB2YXIgbm9kZVkgPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLnk7XG4gICAgLy8gdmFyIHdpZHRoID0gbm9kZS53aWR0aCgpO1xuICAgIC8vIHZhciBoZWlnaHQgPSBub2RlLmhlaWdodCgpO1xuICAgIC8vIHZhciBwYWRkaW5nID0gcGFyc2VJbnQobm9kZS5jc3MoJ2JvcmRlci13aWR0aCcpKSAvIDI7XG5cbiAgICB2YXIgaGFsZldpZHRoID0gd2lkdGggLyAyO1xuICAgIHZhciBoYWxmSGVpZ2h0ID0gaGVpZ2h0IC8gMjtcblxuICAgIHZhciBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zO1xuXG4gICAgLy8gVG9wIHNlZ21lbnQsIGxlZnQgdG8gcmlnaHRcbiAgICB7XG4gICAgICB2YXIgdG9wU3RhcnRYID0gbm9kZVggLSBoYWxmV2lkdGggLSBwYWRkaW5nO1xuICAgICAgdmFyIHRvcFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCAtIHBhZGRpbmc7XG4gICAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgaGFsZldpZHRoICsgcGFkZGluZztcbiAgICAgIHZhciB0b3BFbmRZID0gdG9wU3RhcnRZO1xuXG4gICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gY3lNYXRoLmZpbml0ZUxpbmVzSW50ZXJzZWN0KFxuICAgICAgICAgICAgICB4LCB5LCBub2RlWCwgbm9kZVksIHRvcFN0YXJ0WCwgdG9wU3RhcnRZLCB0b3BFbmRYLCB0b3BFbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmlnaHQgc2VnbWVudCwgdG9wIHRvIGJvdHRvbVxuICAgIHtcbiAgICAgIHZhciByaWdodFN0YXJ0WCA9IG5vZGVYICsgaGFsZldpZHRoICsgcGFkZGluZztcbiAgICAgIHZhciByaWdodFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCAtIHBhZGRpbmc7XG4gICAgICB2YXIgcmlnaHRFbmRYID0gcmlnaHRTdGFydFg7XG4gICAgICB2YXIgcmlnaHRFbmRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcblxuICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IGN5TWF0aC5maW5pdGVMaW5lc0ludGVyc2VjdChcbiAgICAgICAgICAgICAgeCwgeSwgbm9kZVgsIG5vZGVZLCByaWdodFN0YXJ0WCwgcmlnaHRTdGFydFksIHJpZ2h0RW5kWCwgcmlnaHRFbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQm90dG9tIHNlZ21lbnQsIGxlZnQgdG8gcmlnaHRcbiAgICB7XG4gICAgICB2YXIgYm90dG9tU3RhcnRYID0gbm9kZVggLSBoYWxmV2lkdGggKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgICAgdmFyIGJvdHRvbVN0YXJ0WSA9IG5vZGVZICsgaGFsZkhlaWdodCArIHBhZGRpbmc7XG4gICAgICB2YXIgYm90dG9tRW5kWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcbiAgICAgIHZhciBib3R0b21FbmRZID0gYm90dG9tU3RhcnRZO1xuXG4gICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gY3lNYXRoLmZpbml0ZUxpbmVzSW50ZXJzZWN0KFxuICAgICAgICAgICAgICB4LCB5LCBub2RlWCwgbm9kZVksIGJvdHRvbVN0YXJ0WCwgYm90dG9tU3RhcnRZLCBib3R0b21FbmRYLCBib3R0b21FbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGVmdCBzZWdtZW50LCB0b3AgdG8gYm90dG9tXG4gICAge1xuICAgICAgdmFyIGxlZnRTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCAtIHBhZGRpbmc7XG4gICAgICB2YXIgbGVmdFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCAtIHBhZGRpbmc7XG4gICAgICB2YXIgbGVmdEVuZFggPSBsZWZ0U3RhcnRYO1xuICAgICAgdmFyIGxlZnRFbmRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcblxuICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IGN5TWF0aC5maW5pdGVMaW5lc0ludGVyc2VjdChcbiAgICAgICAgICAgICAgeCwgeSwgbm9kZVgsIG5vZGVZLCBsZWZ0U3RhcnRYLCBsZWZ0U3RhcnRZLCBsZWZ0RW5kWCwgbGVmdEVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpbnRlcnNlY3Rpb25zIHdpdGggYXJjIHNlZ21lbnRzLCB3ZSBoYXZlIG9ubHkgdHdvIGFyY3MgZm9yXG4gICAgLy9udWNsZWljIGFjaWQgZmVhdHVyZXNcbiAgICB2YXIgYXJjSW50ZXJzZWN0aW9ucztcblxuICAgIC8vIEJvdHRvbSBSaWdodFxuICAgIHtcbiAgICAgIHZhciBib3R0b21SaWdodENlbnRlclggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBib3R0b21SaWdodENlbnRlclkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXNcbiAgICAgIGFyY0ludGVyc2VjdGlvbnMgPSBjeU1hdGguaW50ZXJzZWN0TGluZUNpcmNsZShcbiAgICAgICAgICAgICAgeCwgeSwgbm9kZVgsIG5vZGVZLFxuICAgICAgICAgICAgICBib3R0b21SaWdodENlbnRlclgsIGJvdHRvbVJpZ2h0Q2VudGVyWSwgY29ybmVyUmFkaXVzICsgcGFkZGluZyk7XG5cbiAgICAgIC8vIEVuc3VyZSB0aGUgaW50ZXJzZWN0aW9uIGlzIG9uIHRoZSBkZXNpcmVkIHF1YXJ0ZXIgb2YgdGhlIGNpcmNsZVxuICAgICAgaWYgKGFyY0ludGVyc2VjdGlvbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzBdID49IGJvdHRvbVJpZ2h0Q2VudGVyWFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzFdID49IGJvdHRvbVJpZ2h0Q2VudGVyWSkge1xuICAgICAgICByZXR1cm4gW2FyY0ludGVyc2VjdGlvbnNbMF0sIGFyY0ludGVyc2VjdGlvbnNbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJvdHRvbSBMZWZ0XG4gICAge1xuICAgICAgdmFyIGJvdHRvbUxlZnRDZW50ZXJYID0gbm9kZVggLSBoYWxmV2lkdGggKyBjb3JuZXJSYWRpdXM7XG4gICAgICB2YXIgYm90dG9tTGVmdENlbnRlclkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXNcbiAgICAgIGFyY0ludGVyc2VjdGlvbnMgPSBjeU1hdGguaW50ZXJzZWN0TGluZUNpcmNsZShcbiAgICAgICAgICAgICAgeCwgeSwgbm9kZVgsIG5vZGVZLFxuICAgICAgICAgICAgICBib3R0b21MZWZ0Q2VudGVyWCwgYm90dG9tTGVmdENlbnRlclksIGNvcm5lclJhZGl1cyArIHBhZGRpbmcpO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA8PSBib3R0b21MZWZ0Q2VudGVyWFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzFdID49IGJvdHRvbUxlZnRDZW50ZXJZKSB7XG4gICAgICAgIHJldHVybiBbYXJjSW50ZXJzZWN0aW9uc1swXSwgYXJjSW50ZXJzZWN0aW9uc1sxXV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTsgLy8gaWYgbm90aGluZ1xuICB9O1xuXG4gIC8vdGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgaW50ZXJzZWN0aW9ucyBvZiBhbnkgbGluZSB3aXRoIHRoZSB1cHBlciBoYWxmIG9mIHBlcnR1cmJpbmcgYWdlbnRcbiAgJCQuc2Jnbi5wZXJ0dXJiaW5nQWdlbnRJbnRlcnNlY3RMaW5lID0gZnVuY3Rpb24gKFxuICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCBub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIHBhZGRpbmcpIHtcblxuICAgIHZhciBoYWxmV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgdmFyIGhhbGZIZWlnaHQgPSBoZWlnaHQgLyAyO1xuXG4gICAgLy8gQ2hlY2sgaW50ZXJzZWN0aW9ucyB3aXRoIHN0cmFpZ2h0IGxpbmUgc2VnbWVudHNcbiAgICB2YXIgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IFtdO1xuXG4gICAgLy8gVG9wIHNlZ21lbnQsIGxlZnQgdG8gcmlnaHRcbiAgICB7XG4gICAgICB2YXIgdG9wU3RhcnRYID0gbm9kZVggLSBoYWxmV2lkdGggLSBwYWRkaW5nO1xuICAgICAgdmFyIHRvcFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCAtIHBhZGRpbmc7XG4gICAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgaGFsZldpZHRoICsgcGFkZGluZztcbiAgICAgIHZhciB0b3BFbmRZID0gdG9wU3RhcnRZO1xuXG4gICAgICB2YXIgaW50ZXJzZWN0aW9uID0gY3lNYXRoLmZpbml0ZUxpbmVzSW50ZXJzZWN0KFxuICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MiwgdG9wU3RhcnRYLCB0b3BTdGFydFksIHRvcEVuZFgsIHRvcEVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmNvbmNhdChpbnRlcnNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJpZ2h0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgICB7XG4gICAgICB2YXIgcmlnaHRTdGFydFggPSBub2RlWCArIGhhbGZXaWR0aCArIHBhZGRpbmc7XG4gICAgICB2YXIgcmlnaHRTdGFydFkgPSBub2RlWSAtIGhhbGZIZWlnaHQgLSBwYWRkaW5nO1xuICAgICAgdmFyIHJpZ2h0RW5kWCA9IHJpZ2h0U3RhcnRYIC0gaGFsZldpZHRoLzI7XG4gICAgICB2YXIgcmlnaHRFbmRZID0gbm9kZVkgKyBwYWRkaW5nO1xuXG4gICAgICB2YXIgaW50ZXJzZWN0aW9uID0gY3lNYXRoLmZpbml0ZUxpbmVzSW50ZXJzZWN0KFxuICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MiwgcmlnaHRTdGFydFgsIHJpZ2h0U3RhcnRZLCByaWdodEVuZFgsIHJpZ2h0RW5kWSwgZmFsc2UpO1xuXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGludGVyc2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGVmdCBzZWdtZW50LCB0b3AgdG8gYm90dG9tXG4gICAge1xuICAgICAgdmFyIGxlZnRTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCAtIHBhZGRpbmc7XG4gICAgICB2YXIgbGVmdFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCAtIHBhZGRpbmc7XG4gICAgICB2YXIgbGVmdEVuZFggPSBsZWZ0U3RhcnRYICsgaGFsZldpZHRoLzI7XG4gICAgICB2YXIgbGVmdEVuZFkgPSBub2RlWSArIHBhZGRpbmc7XG5cbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBjeU1hdGguZmluaXRlTGluZXNJbnRlcnNlY3QoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCBsZWZ0U3RhcnRYLCBsZWZ0U3RhcnRZLCBsZWZ0RW5kWCwgbGVmdEVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmNvbmNhdChpbnRlcnNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zO1xuICB9O1xuXG4gIC8vdGhpcyBmdW5jdGlvbiBnaXZlcyB0aGUgaW50ZXJzZWN0aW9ucyBvZiBhbnkgbGluZSB3aXRoIGEgcm91bmQgcmVjdGFuZ2xlXG4gICQkLnNiZ24ucm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lID0gZnVuY3Rpb24gKFxuICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCBub2RlWCwgbm9kZVksIHdpZHRoLCBoZWlnaHQsIGNvcm5lclJhZGl1cywgcGFkZGluZykge1xuXG4gICAgdmFyIGhhbGZXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICB2YXIgaGFsZkhlaWdodCA9IGhlaWdodCAvIDI7XG5cbiAgICAvLyBDaGVjayBpbnRlcnNlY3Rpb25zIHdpdGggc3RyYWlnaHQgbGluZSBzZWdtZW50c1xuICAgIHZhciBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gW107XG4gICAgLy8gVG9wIHNlZ21lbnQsIGxlZnQgdG8gcmlnaHRcbiAgICB7XG4gICAgICB2YXIgdG9wU3RhcnRYID0gbm9kZVggLSBoYWxmV2lkdGggKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgICAgdmFyIHRvcFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCAtIHBhZGRpbmc7XG4gICAgICB2YXIgdG9wRW5kWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcbiAgICAgIHZhciB0b3BFbmRZID0gdG9wU3RhcnRZO1xuXG4gICAgICB2YXIgaW50ZXJzZWN0aW9uID0gY3lNYXRoLmZpbml0ZUxpbmVzSW50ZXJzZWN0KFxuICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MiwgdG9wU3RhcnRYLCB0b3BTdGFydFksIHRvcEVuZFgsIHRvcEVuZFksIGZhbHNlKTtcblxuICAgICAgaWYgKGludGVyc2VjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmNvbmNhdChpbnRlcnNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJpZ2h0IHNlZ21lbnQsIHRvcCB0byBib3R0b21cbiAgICB7XG4gICAgICB2YXIgcmlnaHRTdGFydFggPSBub2RlWCArIGhhbGZXaWR0aCArIHBhZGRpbmc7XG4gICAgICB2YXIgcmlnaHRTdGFydFkgPSBub2RlWSAtIGhhbGZIZWlnaHQgKyBjb3JuZXJSYWRpdXMgLSBwYWRkaW5nO1xuICAgICAgdmFyIHJpZ2h0RW5kWCA9IHJpZ2h0U3RhcnRYO1xuICAgICAgdmFyIHJpZ2h0RW5kWSA9IG5vZGVZICsgaGFsZkhlaWdodCAtIGNvcm5lclJhZGl1cyArIHBhZGRpbmc7XG5cbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBjeU1hdGguZmluaXRlTGluZXNJbnRlcnNlY3QoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCByaWdodFN0YXJ0WCwgcmlnaHRTdGFydFksIHJpZ2h0RW5kWCwgcmlnaHRFbmRZLCBmYWxzZSk7XG5cbiAgICAgIGlmIChpbnRlcnNlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5jb25jYXQoaW50ZXJzZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCb3R0b20gc2VnbWVudCwgbGVmdCB0byByaWdodFxuICAgIHtcbiAgICAgIHZhciBib3R0b21TdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgICB2YXIgYm90dG9tU3RhcnRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0ICsgcGFkZGluZztcbiAgICAgIHZhciBib3R0b21FbmRYID0gbm9kZVggKyBoYWxmV2lkdGggLSBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgICAgdmFyIGJvdHRvbUVuZFkgPSBib3R0b21TdGFydFk7XG5cbiAgICAgIHZhciBpbnRlcnNlY3Rpb24gPSBjeU1hdGguZmluaXRlTGluZXNJbnRlcnNlY3QoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLCBib3R0b21TdGFydFgsIGJvdHRvbVN0YXJ0WSwgYm90dG9tRW5kWCwgYm90dG9tRW5kWSwgZmFsc2UpO1xuXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGludGVyc2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGVmdCBzZWdtZW50LCB0b3AgdG8gYm90dG9tXG4gICAge1xuICAgICAgdmFyIGxlZnRTdGFydFggPSBub2RlWCAtIGhhbGZXaWR0aCAtIHBhZGRpbmc7XG4gICAgICB2YXIgbGVmdFN0YXJ0WSA9IG5vZGVZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgICB2YXIgbGVmdEVuZFggPSBsZWZ0U3RhcnRYO1xuICAgICAgdmFyIGxlZnRFbmRZID0gbm9kZVkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzICsgcGFkZGluZztcblxuICAgICAgdmFyIGludGVyc2VjdGlvbiA9IGN5TWF0aC5maW5pdGVMaW5lc0ludGVyc2VjdChcbiAgICAgICAgICAgICAgeDEsIHkxLCB4MiwgeTIsIGxlZnRTdGFydFgsIGxlZnRTdGFydFksIGxlZnRFbmRYLCBsZWZ0RW5kWSwgZmFsc2UpO1xuXG4gICAgICBpZiAoaW50ZXJzZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGludGVyc2VjdGlvbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaW50ZXJzZWN0aW9ucyB3aXRoIGFyYyBzZWdtZW50c1xuICAgIHZhciBhcmNJbnRlcnNlY3Rpb25zO1xuXG4gICAgLy8gVG9wIExlZnRcbiAgICB7XG4gICAgICB2YXIgdG9wTGVmdENlbnRlclggPSBub2RlWCAtIGhhbGZXaWR0aCArIGNvcm5lclJhZGl1cztcbiAgICAgIHZhciB0b3BMZWZ0Q2VudGVyWSA9IG5vZGVZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1c1xuICAgICAgYXJjSW50ZXJzZWN0aW9ucyA9IGN5TWF0aC5pbnRlcnNlY3RMaW5lQ2lyY2xlKFxuICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MixcbiAgICAgICAgICAgICAgdG9wTGVmdENlbnRlclgsIHRvcExlZnRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBpbnRlcnNlY3Rpb24gaXMgb24gdGhlIGRlc2lyZWQgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG4gICAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPD0gdG9wTGVmdENlbnRlclhcbiAgICAgICAgICAgICAgJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA8PSB0b3BMZWZ0Q2VudGVyWSkge1xuICAgICAgICBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zID0gc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5jb25jYXQoYXJjSW50ZXJzZWN0aW9ucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVG9wIFJpZ2h0XG4gICAge1xuICAgICAgdmFyIHRvcFJpZ2h0Q2VudGVyWCA9IG5vZGVYICsgaGFsZldpZHRoIC0gY29ybmVyUmFkaXVzO1xuICAgICAgdmFyIHRvcFJpZ2h0Q2VudGVyWSA9IG5vZGVZIC0gaGFsZkhlaWdodCArIGNvcm5lclJhZGl1c1xuICAgICAgYXJjSW50ZXJzZWN0aW9ucyA9IGN5TWF0aC5pbnRlcnNlY3RMaW5lQ2lyY2xlKFxuICAgICAgICAgICAgICB4MSwgeTEsIHgyLCB5MixcbiAgICAgICAgICAgICAgdG9wUmlnaHRDZW50ZXJYLCB0b3BSaWdodENlbnRlclksIGNvcm5lclJhZGl1cyArIHBhZGRpbmcpO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA+PSB0b3BSaWdodENlbnRlclhcbiAgICAgICAgICAgICAgJiYgYXJjSW50ZXJzZWN0aW9uc1sxXSA8PSB0b3BSaWdodENlbnRlclkpIHtcbiAgICAgICAgc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucyA9IHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMuY29uY2F0KGFyY0ludGVyc2VjdGlvbnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEJvdHRvbSBSaWdodFxuICAgIHtcbiAgICAgIHZhciBib3R0b21SaWdodENlbnRlclggPSBub2RlWCArIGhhbGZXaWR0aCAtIGNvcm5lclJhZGl1cztcbiAgICAgIHZhciBib3R0b21SaWdodENlbnRlclkgPSBub2RlWSArIGhhbGZIZWlnaHQgLSBjb3JuZXJSYWRpdXNcbiAgICAgIGFyY0ludGVyc2VjdGlvbnMgPSBjeU1hdGguaW50ZXJzZWN0TGluZUNpcmNsZShcbiAgICAgICAgICAgICAgeDEsIHkxLCB4MiwgeTIsXG4gICAgICAgICAgICAgIGJvdHRvbVJpZ2h0Q2VudGVyWCwgYm90dG9tUmlnaHRDZW50ZXJZLCBjb3JuZXJSYWRpdXMgKyBwYWRkaW5nKTtcblxuICAgICAgLy8gRW5zdXJlIHRoZSBpbnRlcnNlY3Rpb24gaXMgb24gdGhlIGRlc2lyZWQgcXVhcnRlciBvZiB0aGUgY2lyY2xlXG4gICAgICBpZiAoYXJjSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICYmIGFyY0ludGVyc2VjdGlvbnNbMF0gPj0gYm90dG9tUmlnaHRDZW50ZXJYXG4gICAgICAgICAgICAgICYmIGFyY0ludGVyc2VjdGlvbnNbMV0gPj0gYm90dG9tUmlnaHRDZW50ZXJZKSB7XG4gICAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmNvbmNhdChhcmNJbnRlcnNlY3Rpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCb3R0b20gTGVmdFxuICAgIHtcbiAgICAgIHZhciBib3R0b21MZWZ0Q2VudGVyWCA9IG5vZGVYIC0gaGFsZldpZHRoICsgY29ybmVyUmFkaXVzO1xuICAgICAgdmFyIGJvdHRvbUxlZnRDZW50ZXJZID0gbm9kZVkgKyBoYWxmSGVpZ2h0IC0gY29ybmVyUmFkaXVzXG4gICAgICBhcmNJbnRlcnNlY3Rpb25zID0gY3lNYXRoLmludGVyc2VjdExpbmVDaXJjbGUoXG4gICAgICAgICAgICAgIHgxLCB5MSwgeDIsIHkyLFxuICAgICAgICAgICAgICBib3R0b21MZWZ0Q2VudGVyWCwgYm90dG9tTGVmdENlbnRlclksIGNvcm5lclJhZGl1cyArIHBhZGRpbmcpO1xuXG4gICAgICAvLyBFbnN1cmUgdGhlIGludGVyc2VjdGlvbiBpcyBvbiB0aGUgZGVzaXJlZCBxdWFydGVyIG9mIHRoZSBjaXJjbGVcbiAgICAgIGlmIChhcmNJbnRlcnNlY3Rpb25zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgJiYgYXJjSW50ZXJzZWN0aW9uc1swXSA8PSBib3R0b21MZWZ0Q2VudGVyWFxuICAgICAgICAgICAgICAmJiBhcmNJbnRlcnNlY3Rpb25zWzFdID49IGJvdHRvbUxlZnRDZW50ZXJZKSB7XG4gICAgICAgIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnMgPSBzdHJhaWdodExpbmVJbnRlcnNlY3Rpb25zLmNvbmNhdChhcmNJbnRlcnNlY3Rpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RyYWlnaHRMaW5lSW50ZXJzZWN0aW9ucy5sZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIHN0cmFpZ2h0TGluZUludGVyc2VjdGlvbnM7XG4gICAgcmV0dXJuIFtdOyAvLyBpZiBub3RoaW5nXG4gIH07XG5cbiAgJCQuc2Jnbi5pbnRlcnNlY3RMaW5lRWxsaXBzZSA9IGZ1bmN0aW9uIChcbiAgICAgICAgICB4MSwgeTEsIHgyLCB5MiwgY2VudGVyWCwgY2VudGVyWSwgd2lkdGgsIGhlaWdodCwgcGFkZGluZykge1xuXG4gICAgdmFyIHcgPSB3aWR0aCAvIDIgKyBwYWRkaW5nO1xuICAgIHZhciBoID0gaGVpZ2h0IC8gMiArIHBhZGRpbmc7XG4gICAgdmFyIGFuID0gY2VudGVyWDtcbiAgICB2YXIgYm4gPSBjZW50ZXJZO1xuXG4gICAgdmFyIGQgPSBbeDIgLSB4MSwgeTIgLSB5MV07XG5cbiAgICB2YXIgbSA9IGRbMV0gLyBkWzBdO1xuICAgIHZhciBuID0gLTEgKiBtICogeDIgKyB5MjtcbiAgICB2YXIgYSA9IGggKiBoICsgdyAqIHcgKiBtICogbTtcbiAgICB2YXIgYiA9IC0yICogYW4gKiBoICogaCArIDIgKiBtICogbiAqIHcgKiB3IC0gMiAqIGJuICogbSAqIHcgKiB3O1xuICAgIHZhciBjID0gYW4gKiBhbiAqIGggKiBoICsgbiAqIG4gKiB3ICogdyAtIDIgKiBibiAqIHcgKiB3ICogbiArXG4gICAgICAgICAgICBibiAqIGJuICogdyAqIHcgLSBoICogaCAqIHcgKiB3O1xuXG4gICAgdmFyIGRpc2NyaW1pbmFudCA9IGIgKiBiIC0gNCAqIGEgKiBjO1xuXG4gICAgaWYgKGRpc2NyaW1pbmFudCA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICB2YXIgdDEgPSAoLWIgKyBNYXRoLnNxcnQoZGlzY3JpbWluYW50KSkgLyAoMiAqIGEpO1xuICAgIHZhciB0MiA9ICgtYiAtIE1hdGguc3FydChkaXNjcmltaW5hbnQpKSAvICgyICogYSk7XG5cbiAgICB2YXIgeE1pbiA9IE1hdGgubWluKHQxLCB0Mik7XG4gICAgdmFyIHhNYXggPSBNYXRoLm1heCh0MSwgdDIpO1xuXG4gICAgdmFyIHlNaW4gPSBtICogeE1pbiAtIG0gKiB4MiArIHkyO1xuICAgIHZhciB5TWF4ID0gbSAqIHhNYXggLSBtICogeDIgKyB5MjtcblxuICAgIHJldHVybiBbeE1pbiwgeU1pbiwgeE1heCwgeU1heF07XG4gIH07XG5cbiAgJCQuc2Jnbi5pbnRlcnNlY3RMaW5lU3RhdGVBbmRJbmZvQm94ZXMgPSBmdW5jdGlvbiAobm9kZSwgeCwgeSkge1xuICAgIHZhciBjZW50ZXJYID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi54O1xuICAgIHZhciBjZW50ZXJZID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi55O1xuICAgIHZhciBwYWRkaW5nID0gcGFyc2VJbnQobm9kZS5jc3MoJ2JvcmRlci13aWR0aCcpKSAvIDI7XG5cbiAgICB2YXIgc3RhdGVBbmRJbmZvcyA9IG5vZGUuX3ByaXZhdGUuZGF0YS5zdGF0ZXNhbmRpbmZvcztcblxuICAgIHZhciBpbnRlcnNlY3Rpb25zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlQW5kSW5mb3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdGF0ZSA9IHN0YXRlQW5kSW5mb3NbaV07XG5cbiAgICAgIGlmICggIXN0YXRlLmlzRGlzcGxheWVkICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluZm9Cb3hXaWR0aCA9IHN0YXRlLmJib3gudztcbiAgICAgIHZhciBpbmZvQm94SGVpZ2h0ID0gc3RhdGUuYmJveC5oO1xuXG4gICAgICB2YXIgY3VyckludGVyc2VjdGlvbnMgPSBudWxsO1xuXG4gICAgICBpZiAoIHN0YXRlLmNsYXp6ID09IFwic3RhdGUgdmFyaWFibGVcIiApIHtcbiAgICAgICAgdmFyIGNvb3JkID0gY2xhc3Nlcy5TdGF0ZVZhcmlhYmxlLmdldEFic29sdXRlQ29vcmQoc3RhdGUsIG5vZGUuY3koKSk7XG4gICAgICAgIGN1cnJJbnRlcnNlY3Rpb25zID0gJCQuc2Jnbi5pbnRlcnNlY3RMaW5lRWxsaXBzZSh4LCB5LCBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgICAgICAgIGNvb3JkLngsIGNvb3JkLnksIGluZm9Cb3hXaWR0aCwgaW5mb0JveEhlaWdodCwgcGFkZGluZyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmICggc3RhdGUuY2xhenogPT0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIgKSB7XG4gICAgICAgIHZhciBjb29yZCA9IGNsYXNzZXMuVW5pdE9mSW5mb3JtYXRpb24uZ2V0QWJzb2x1dGVDb29yZChzdGF0ZSwgbm9kZS5jeSgpKTtcbiAgICAgICAgaWYgKG5vZGUuZGF0YShcImNsYXNzXCIpID09IFwiQkEgbWFjcm9tb2xlY3VsZVwiIHx8IG5vZGUuZGF0YShcImNsYXNzXCIpID09IFwiQkEgbnVjbGVpYyBhY2lkIGZlYXR1cmVcIlxuICAgICAgICAgICAgICAgIHx8IG5vZGUuZGF0YShcImNsYXNzXCIpID09IFwiQkEgY29tcGxleFwiKXtcbiAgICAgICAgICBjdXJySW50ZXJzZWN0aW9ucyA9ICQkLnNiZ24ucm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgICAgICAgY29vcmQueCwgY29vcmQueSwgaW5mb0JveFdpZHRoLCBpbmZvQm94SGVpZ2h0LCA1LCBwYWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLmRhdGEoXCJjbGFzc1wiKSA9PSBcIkJBIHVuc3BlY2lmaWVkIGVudGl0eVwiKXtcbiAgICAgICAgICBjdXJySW50ZXJzZWN0aW9ucyA9ICQkLnNiZ24uaW50ZXJzZWN0TGluZUVsbGlwc2UoeCwgeSwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgICAgICAgY29vcmQueCwgY29vcmQueSwgaW5mb0JveFdpZHRoLCBpbmZvQm94SGVpZ2h0LCBwYWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLmRhdGEoXCJjbGFzc1wiKSA9PSBcIkJBIHNpbXBsZSBjaGVtaWNhbFwiKXtcbiAgICAgICAgICBjdXJySW50ZXJzZWN0aW9ucyA9IGN5TWF0aC5pbnRlcnNlY3RMaW5lQ2lyY2xlKFxuICAgICAgICAgICAgICB4LCB5LFxuICAgICAgICAgICAgICBjZW50ZXJYLCBjZW50ZXJZLFxuICAgICAgICAgICAgICBjb29yZC54LFxuICAgICAgICAgICAgICBjb29yZC55LFxuICAgICAgICAgICAgICBpbmZvQm94V2lkdGggLyA0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLmRhdGEoXCJjbGFzc1wiKSA9PSBcIkJBIHBlcnR1cmJpbmcgYWdlbnRcIil7XG4gICAgICAgICAgY3VyckludGVyc2VjdGlvbnMgPSAkJC5zYmduLnBlcnR1cmJpbmdBZ2VudEludGVyc2VjdExpbmUoeCwgeSwgY2VudGVyWCwgY2VudGVyWSxcbiAgICAgICAgICAgICAgY29vcmQueCwgY29vcmQueSwgaW5mb0JveFdpZHRoLCBpbmZvQm94SGVpZ2h0LCBwYWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjdXJySW50ZXJzZWN0aW9ucyA9ICQkLnNiZ24ucm91bmRSZWN0YW5nbGVJbnRlcnNlY3RMaW5lKHgsIHksIGNlbnRlclgsIGNlbnRlclksXG4gICAgICAgICAgICAgICAgICBjb29yZC54LCBjb29yZC55LCBpbmZvQm94V2lkdGgsIGluZm9Cb3hIZWlnaHQsIDAsIHBhZGRpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGludGVyc2VjdGlvbnMgPSBpbnRlcnNlY3Rpb25zLmNvbmNhdCggY3VyckludGVyc2VjdGlvbnMgKTtcblxuICAgIH1cblxuICAgIHJldHVybiBpbnRlcnNlY3Rpb25zO1xuICB9O1xuXG4gICQkLnNiZ24uY2hlY2tQb2ludFN0YXRlQW5kSW5mb0JveGVzID0gZnVuY3Rpb24gKHgsIHksIG5vZGUsIHRocmVzaG9sZCkge1xuICAgIHJldHVybiBjbGFzc2VzLkF1eGlsaWFyeVVuaXQuY2hlY2tQb2ludCh4LCB5LCBub2RlLCB0aHJlc2hvbGQpO1xuICB9O1xuXG4gICQkLnNiZ24uaXNOb2RlU2hhcGVUb3RhbGx5T3ZlcnJpZGVuID0gZnVuY3Rpb24gKHJlbmRlciwgbm9kZSkge1xuICAgIGlmICh0b3RhbGx5T3ZlcnJpZGVuTm9kZVNoYXBlc1tyZW5kZXIuZ2V0Tm9kZVNoYXBlKG5vZGUpXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xufTtcbiIsIlxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGpzb25Ub1NiZ25tbCwgZWxlbWVudFV0aWxpdGllcywgY3k7XG4gIFxuICAgIGZ1bmN0aW9uIGNkVG9TYmdubWwocGFyYW0pIHtcbiAgICAgIGpzb25Ub1NiZ25tbCA9IHBhcmFtLmpzb25Ub1NiZ25tbENvbnZlcnRlcjtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICAgICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICAgIH1cbiAgXG4gXG4gICAgY2RUb1NiZ25tbC5jb252ZXJ0ID0gZnVuY3Rpb24gKHhtbCxjYWxsYmFjaykge1xuXG4gICAgICAgICQuYWpheCh7XG4gICAgICAgICAgICB0eXBlOiAncG9zdCcsXG4gICAgICAgICAgICB1cmw6IFwiaHR0cDovL3dlYi5uZXd0ZWRpdG9yLm9yZzo4MDgwL2NkMnNiZ25tbFwiLFxuICAgICAgICAgICAgZGF0YTogeG1sLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgY2FsbGJhY2sobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNkVG9TYmdubWw7XG4gIFxuICB9XG4gIFxuXG4iLCJcbnZhciBsaWJzID0gcmVxdWlyZSgnLi4vdXRpbGl0aWVzL2xpYi11dGlsaXRpZXMnKS5nZXRMaWJzKCk7XG52YXIgalF1ZXJ5ID0gJCA9IGxpYnMualF1ZXJ5O1xudmFyIGN5dG9zY2FwZSA9IGxpYnMuY3l0b3NjYXBlO1xuLy8gdmFyIG9wdGlvblV0aWxpdGllcyA9IHJlcXVpcmUoJy4vb3B0aW9uLXV0aWxpdGllcycpO1xuLy8gdmFyIG9wdGlvbnMgPSBvcHRpb25VdGlsaXRpZXMuZ2V0T3B0aW9ucygpO1xudmFyIHRydW5jYXRlID0gcmVxdWlyZSgnLi90ZXh0LXV0aWxpdGllcycpLnRydW5jYXRlO1xuLy8gb25seSBmdW5jdGlvbnMgbm90IGRlcGVuZGluZyBvbiB0aGUgaW5zdGFuY2VzIGNhbiBiZSB1c2VkIGluIHRoaXMgd2F5XG4vLyBlLmcuIGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVTdGF0ZVZhcklkKClcbnZhciBlbGVtZW50VXRpbGl0aWVzID0gcmVxdWlyZSgnLi9lbGVtZW50LXV0aWxpdGllcy1mYWN0b3J5JykoKTtcblxudmFyIG5zID0ge307XG5cbi8vIEtlZXAgaW4gbWluZCB0aGF0IGZvciBlYWNoIG1ldGhvZCAnbWFpbk9iaicgcGFyYW1ldGVyIHJlZmVycyB0byB0aGUgbWFpbiBvYmplY3QgZm9yIHdoaWNoIHRoZSBvcGVyYXRpb24gd2lsbCBiZSBkb25lLlxuLy8gSXQgcmVmZXJzIHRvIHRoZSBvYmplY3QgdGhhdCBjb3VsZCBiZSByZWZlcmVkIGJ5ICd0aGlzJyB3aGlsZSB0aGVyZSB3YXMgcHJvdG90eXBpbmcgaW4gdGhlc2UgY2xhc3Nlcy5cbi8vIEZvciBleGFtcGxlIEF1eGlsaWFyeVVuaXQuY29weShtYWluT2JqLCBleGlzdGluZ0luc3RhbmNlLCBuZXdQYXJlbnQsIG5ld0lkKSBjb3BpZXMgdGhlIHZhcmlhYmxlIHBhc3NlZCBieSAnbWFpbk9iaidcbi8vIHBhcmFtZXRlciBhbmQgaW4gdGhpcyBjYXNlICdtYWluT2JqJyBjYW4gYmUgY29uc2lkZXJlZCBhcyBgdGhlIG9iamVjdCB0byBiZSBjb3BpZWRgXG5cbi8vIFRoZSBvbGQgY29uc3RydWN0b3JzIGFyZSByZXBsYWNlZCBieSAnY29uc3RydWN0KCknIG1ldGhvZHMgd2hpbGUgcmVtb3ZpbmcgcHJvdG90eXBpbmcgZnJvbSB0aGUgY2xhc3Nlcy5cblxuLy8gJ0F1eGlsaWFyeVVuaXQnIGFuZCAnQXV4VW5pdExheW91dCcgb2JqZWN0cyBrZWVwIHRoZSBpZCBvZiB0aGVpciBwYXJlbnQgbm9kZXMgaW5zdGVhZCBvZiB0aGUgbm9kZXMgdGhlbXNlbHZlcyB0byBhdm9pZCBjaXJjdWxhciByZWZlcmVuY2VzLlxuLy8gVG8gbWFpbnRhaW4gdGhpcyBwcm9wZXJ0eSByZWxhdGVkIG1ldGhvZHMgdG8gZ2V0IGFuZCBzZXQgcGFyZW50IG5vZGVzIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIHRoZSBwYXJlbnQgb2JqZWN0LlxuXG4vLyBBbHNvLCB0aGVyZSBpcyBhIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgQXV4aWxpYXJ5VW5pdCBjbGFzcyBhbmQgU3RhdGVWYXJpYWJsZSBhbmQgVW5pdE9mSW5mb3JtYXRpb25cbi8vIGNsYXNzZXMuIFdoaWxlIGNhbGxpbmcgYSBtZXRob2Qgb2YgQXV4aWxpYXJ5VW5pdCBjbGFzcyB0aGF0IG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkIGZyb21cbi8vIHRoZSBhY3R1YWwgY2xhc3Mgb2YgcmVsYXRlZCBhdXhpbGFyeSB1bml0IChXb3VsZCBiZSBTdGF0ZVZhcmlhYmxlIG9yIFVuaXRPZkluZm9ybWF0aW9uLiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IGNvbmZsaWN0aW9ucyB3aGVuIHRoZVxuLy8gbWV0aG9kcyBvZiBBdXhpbGlhcnlVbml0IGNsYXNzIGlzIG92ZXJyaWRlbiBieSB0aGVzZSBjbGFzc2VzKS4gVGhhdCBjbGFzcyBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyAnZ2V0QXV4VW5pdENsYXNzKG1haW5PYmopJ1xuLy8gbWV0aG9kIGZvciB0aGUgYXV4aWxhcnkgdW5pdCBvYmplY3QuXG5cbnZhciBnZXRBdXhVbml0Q2xhc3MgPSBmdW5jdGlvbih1bml0KSB7XG4gIC8vIFVuaXQgcGFyYW1ldGVyIG1heSBwYXNzIHRoZSB1bml0IGl0c2VsZiBvciB0aGUgdHlwZSBvZiB0aGUgdW5pdCBjaGVjayBpdFxuICB2YXIgdW5pdFR5cGUgPSB0eXBlb2YgdW5pdCA9PT0gJ3N0cmluZycgPyB1bml0IDogdW5pdC5jbGF6ejtcbiAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB1bml0IGNsYXNzIGFjY29yZGluZyB0byB0aGUgdW5pdCB0eXBlXG4gIHZhciBjbGFzc05hbWUgPSB1bml0VHlwZSA9PT0gJ3N0YXRlIHZhcmlhYmxlJyA/ICdTdGF0ZVZhcmlhYmxlJyA6ICdVbml0T2ZJbmZvcm1hdGlvbic7XG4gIHJldHVybiBuc1tjbGFzc05hbWVdO1xufTtcblxubnMuZ2V0QXV4VW5pdENsYXNzID0gZ2V0QXV4VW5pdENsYXNzOyAvLyBFeHBvc2UgZ2V0QXV4VW5pdENsYXNzIG1ldGhvZFxuXG52YXIgQXV4aWxpYXJ5VW5pdCA9IHt9O1xuXG4vLyAtLS0tLS0tLS0tLS0tLSBBdXhpbGlhcnlVbml0IC0tLS0tLS0tLS0tLS0tIC8vXG4vLyBjb25zdHJ1Y3RzIGEgbmV3IGF1eGlsaWFyeSB1bml0IG9iamVjdCBhbmQgcmV0dXJucyBpdFxuQXV4aWxpYXJ5VW5pdC5jb25zdHJ1Y3QgPSBmdW5jdGlvbihwYXJlbnQpIHtcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIEF1eGlsaWFyeVVuaXQuc2V0UGFyZW50UmVmKG9iaiwgcGFyZW50KTtcblxuICBvYmouaWQgPSBudWxsO1xuICBvYmouYmJveCA9IG51bGw7ICBcbiAgb2JqLmFuY2hvclNpZGUgPSBudWxsO1xuICBvYmouaXNEaXNwbGF5ZWQgPSBmYWxzZTtcbiAgb2JqLnN0eWxlID0gbnVsbDtcblxuICByZXR1cm4gb2JqO1xufTtcblxuQXV4aWxpYXJ5VW5pdC5nZXRQYXJlbnQgPSBmdW5jdGlvbihtYWluT2JqLCBjeSkge1xuICB2YXIgcGFyZW50ID0gbWFpbk9iai5wYXJlbnQ7XG4gIC8vIElmIHBhcmVudCB2YXJpYWJsZSBzdG9yZXMgdGhlIGlkIG9mIHBhcmVudCBpbnN0ZWFkIG9mIHRoZSBhY3R1YWwgcGFyZW50IGdldCB0aGUgYWN0dWFsIHBhcmVudCBieSBpZFxuICBpZiAodHlwZW9mIHBhcmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gY3kuZ2V0RWxlbWVudEJ5SWQocGFyZW50KTtcbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59O1xuXG5BdXhpbGlhcnlVbml0LnNldFBhcmVudFJlZiA9IGZ1bmN0aW9uKG1haW5PYmosIG5ld1BhcmVudCkge1xuICBpZiAobWFpbk9iaiAmJiBuZXdQYXJlbnQpIHtcbiAgICAvLyBSZWZlcmVuY2UgdG8gaWQgaW5zdGVhZCBvZiB0aGUgbm9kZSBpdHNlbGYgdG8gYXZhb2lkIGNpcmN1bGFyIHJlZmVyZW5jZVxuICAgIG1haW5PYmoucGFyZW50ID0gdHlwZW9mIG5ld1BhcmVudCA9PT0gJ3N0cmluZycgPyBuZXdQYXJlbnQgOiBuZXdQYXJlbnQuaWQoKTtcbiAgfVxufVxuXG5BdXhpbGlhcnlVbml0LmNoZWNrUG9pbnQgPSBmdW5jdGlvbih4LCB5LCBub2RlLCB0aHJlc2hvbGQpIHtcbiAgdmFyIGNlbnRlclggPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLng7XG4gIHZhciBjZW50ZXJZID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi55O1xuICB2YXIgcGFkZGluZyA9IHBhcnNlSW50KG5vZGUuY3NzKCdib3JkZXItd2lkdGgnKSkgLyAyO1xuICB2YXIgc3RhdGVBbmRJbmZvcyA9IG5vZGUuX3ByaXZhdGUuZGF0YS5zdGF0ZXNhbmRpbmZvcztcbiAgdmFyIGN5QmFzZU5vZGVTaGFwZXMgPSBjeXRvc2NhcGUuYmFzZU5vZGVTaGFwZXM7XG4vLyAgICB0aHJlc2hvbGQgPSBwYXJzZUZsb2F0KHRocmVzaG9sZCk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZUFuZEluZm9zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHN0YXRlID0gc3RhdGVBbmRJbmZvc1tpXTtcblxuICAgIGlmICghc3RhdGUuaXNEaXNwbGF5ZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZVdpZHRoID0gcGFyc2VGbG9hdChzdGF0ZS5iYm94LncpICsgdGhyZXNob2xkO1xuICAgIHZhciBzdGF0ZUhlaWdodCA9IHBhcnNlRmxvYXQoc3RhdGUuYmJveC5oKSArIHRocmVzaG9sZDtcbiAgICB2YXIgY29vcmQgPSBBdXhpbGlhcnlVbml0LmdldEFic29sdXRlQ29vcmQoc3RhdGUsIG5vZGUuY3koKSk7XG4gICAgdmFyIHN0YXRlQ2VudGVyWCA9IGNvb3JkLng7XG4gICAgdmFyIHN0YXRlQ2VudGVyWSA9IGNvb3JkLnk7XG4gICAgdmFyIGNoZWNrUG9pbnQ7XG5cbiAgICBpZiAoc3RhdGUuY2xhenogPT0gXCJzdGF0ZSB2YXJpYWJsZVwiKSB7XG4gICAgICBjaGVja1BvaW50ID0gY3lCYXNlTm9kZVNoYXBlc1tcImVsbGlwc2VcIl0uY2hlY2tQb2ludChcbiAgICAgICAgICAgICAgeCwgeSwgcGFkZGluZywgc3RhdGVXaWR0aCwgc3RhdGVIZWlnaHQsIHN0YXRlQ2VudGVyWCwgc3RhdGVDZW50ZXJZKTtcbiAgICB9IGVsc2UgaWYgKHN0YXRlLmNsYXp6ID09IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiKSB7XG4gICAgICBjaGVja1BvaW50ID0gY3lCYXNlTm9kZVNoYXBlc1tcInJvdW5kcmVjdGFuZ2xlXCJdLmNoZWNrUG9pbnQoXG4gICAgICAgICAgICAgIHgsIHksIHBhZGRpbmcsIHN0YXRlV2lkdGgsIHN0YXRlSGVpZ2h0LCBzdGF0ZUNlbnRlclgsIHN0YXRlQ2VudGVyWSk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrUG9pbnQgPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuLypcbiAqIFJldHVybiBhIG5ldyBBdXhpbGlhcnlVbml0IG9iamVjdC4gQSBuZXcgcGFyZW50IHJlZmVyZW5jZSBhbmQgbmV3IGlkIGNhblxuICogb3B0aW9ubmFsbHkgYmUgcGFzc2VkLlxuICovXG5BdXhpbGlhcnlVbml0LmNvcHkgPSBmdW5jdGlvbiAobWFpbk9iaiwgY3ksIGV4aXN0aW5nSW5zdGFuY2UsIG5ld1BhcmVudCwgbmV3SWQpIHtcbiAgdmFyIG5ld1VuaXQgPSBleGlzdGluZ0luc3RhbmNlID8gZXhpc3RpbmdJbnN0YW5jZSA6IEF1eGlsaWFyeVVuaXQuY29uc3RydWN0KCk7XG5cbiAgdmFyIHBhcmVudFRvU2V0ID0gbmV3UGFyZW50IHx8IGdldEF1eFVuaXRDbGFzcyhtYWluT2JqKS5nZXRQYXJlbnQobWFpbk9iaiwgY3kpO1xuICBBdXhpbGlhcnlVbml0LnNldFBhcmVudFJlZihuZXdVbml0LCBwYXJlbnRUb1NldCk7XG5cbiAgbmV3VW5pdC5pZCA9IG5ld0lkID8gbmV3SWQgOiBtYWluT2JqLmlkO1xuICBuZXdVbml0LmJib3ggPSBqUXVlcnkuZXh0ZW5kKHRydWUsIHt9LCBtYWluT2JqLmJib3gpO1xuICBuZXdVbml0LmNvb3JkVHlwZSA9IG1haW5PYmouY29vcmRUeXBlO1xuICBuZXdVbml0LmFuY2hvclNpZGUgPSBtYWluT2JqLmFuY2hvclNpZGU7XG4gIG5ld1VuaXQuaXNEaXNwbGF5ZWQgPSBtYWluT2JqLmlzRGlzcGxheWVkO1xuICBuZXdVbml0LnN0eWxlID0gbWFpbk9iai5zdHlsZTtcbiAgcmV0dXJuIG5ld1VuaXQ7XG59O1xuXG4vLyBkcmF3IHRoZSBhdXhpbGlhcnkgdW5pdCBhdCBpdHMgcG9zaXRpb25cbkF1eGlsaWFyeVVuaXQuZHJhdyA9IGZ1bmN0aW9uKG1haW5PYmosIGN5LCBjb250ZXh0KSB7XG4gIHZhciB1bml0Q2xhc3MgPSBnZXRBdXhVbml0Q2xhc3MobWFpbk9iaik7XG4gIHZhciBjb29yZHMgPSB1bml0Q2xhc3MuZ2V0QWJzb2x1dGVDb29yZChtYWluT2JqLCBjeSk7XG5cbiAgdW5pdENsYXNzLmRyYXdTaGFwZShtYWluT2JqLCBjeSwgY29udGV4dCwgY29vcmRzLngsIGNvb3Jkcy55KTtcbiAgaWYgKHVuaXRDbGFzcy5oYXNUZXh0KG1haW5PYmosIGN5KSkge1xuICAgIHVuaXRDbGFzcy5kcmF3VGV4dChtYWluT2JqLCBjeSwgY29udGV4dCwgY29vcmRzLngsIGNvb3Jkcy55KTtcbiAgfVxuICBtYWluT2JqLmlzRGlzcGxheWVkID0gdHJ1ZTtcbn07XG5cbi8vIHRvIGJlIGltcGxlbWVudGVkIGJ5IGNoaWxkcmVuXG5BdXhpbGlhcnlVbml0LmdldFRleHQgPSBmdW5jdGlvbihtYWluT2JqLCBjeSkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJBYnN0cmFjdCBtZXRob2QhXCIpO1xufTtcbkF1eGlsaWFyeVVuaXQuaGFzVGV4dCA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkFic3RyYWN0IG1ldGhvZCFcIik7XG59O1xuQXV4aWxpYXJ5VW5pdC5kcmF3U2hhcGUgPSBmdW5jdGlvbihtYWluT2JqLCBjeSwgY29udGV4dCwgeCwgeSkge1xuICB2YXIgc3R5bGUgPSBtYWluT2JqLnN0eWxlO1xuICBjeXRvc2NhcGUuc2Jnbi5kcmF3SW5mb0JveChjb250ZXh0LCB4LCB5LCBtYWluT2JqLmJib3gudywgbWFpbk9iai5iYm94LmgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVsnc2hhcGUtbmFtZSddKTtcblxuICB2YXIgdG1wX2N0eHQgPSBjb250ZXh0LmZpbGxTdHlsZTtcbiAgY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZVsnYmFja2dyb3VuZC1jb2xvciddO1xuICBjb250ZXh0LmZpbGwoKTtcbiAgY29udGV4dC5maWxsU3R5bGUgPSB0bXBfY3R4dDtcblxuICB2YXIgcGFyZW50ID0gZ2V0QXV4VW5pdENsYXNzKG1haW5PYmopLmdldFBhcmVudChtYWluT2JqLCBjeSk7XG4gIHZhciBib3JkZXJTdHlsZSA9IHN0eWxlLmRhc2hlZCA/ICdkYXNoZWQnIDogdW5kZWZpbmVkO1xuICB2YXIgYm9yZGVyV2lkdGggPSBzdHlsZVsnYm9yZGVyLXdpZHRoJ107XG4gIC8vIFNlbGVjdGVkIG5vZGVzIGhhdmUgYSBzcGVjaWZpYyBib3JkZXIgY29sb3Igc28gaW5mb2JveCBzaG91bGQgaGF2ZSB0aGUgc2FtZVxuICAvLyBib3JkZXIgY29sb3Igd2hlbiB0aGUgbm9kZSBpcyBzZWxlY3RlZC4gTWF5IG5lZWQgdG8gYmUgdXBkYXRlZCBpZiBzdHlsZSBvZlxuICAvLyBzZWxlY3RlZCBub2RlcyBpcyB1cGRhdGVkIGluIGEgZGlmZmVyZW50IHdheS5cbiAgdmFyIGJvcmRlckNvbG9yID0gcGFyZW50LnNlbGVjdGVkKCkgPyBudWxsIDogc3R5bGVbJ2JvcmRlci1jb2xvciddO1xuICBjeXRvc2NhcGUuc2Jnbi5kcmF3Qm9yZGVyKCB7IGNvbnRleHQsIG5vZGU6IHBhcmVudCwgYm9yZGVyU3R5bGUsIGJvcmRlckNvbG9yLCBib3JkZXJXaWR0aCB9ICk7XG59O1xuXG4vLyBkcmF3IHRoZSBzdGF0ZXNPckluZm8ncyBsYWJlbCBhdCBnaXZlbiBwb3NpdGlvblxuQXV4aWxpYXJ5VW5pdC5kcmF3VGV4dCA9IGZ1bmN0aW9uKG1haW5PYmosIGN5LCBjb250ZXh0LCBjZW50ZXJYLCBjZW50ZXJZKSB7XG4gIC8vIGFjY2VzcyB0aGUgc2JnbnZpelBhcmFtcyBzZXQgZm9yIGN5XG4gIHZhciBvcHRpb25zID0gY3kuc2NyYXRjaCgnX3NiZ252aXonKS5zYmdudml6UGFyYW1zLm9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG4gIHZhciB1bml0Q2xhc3MgPSBnZXRBdXhVbml0Q2xhc3MobWFpbk9iaik7XG4gIHZhciBwYXJlbnQgPSB1bml0Q2xhc3MuZ2V0UGFyZW50KG1haW5PYmosIGN5KTtcbiAgdmFyIHN0eWxlID0gbWFpbk9iai5zdHlsZTtcblxuICAvLyBwYXJ0IG9mIDogJCQuc2Jnbi5kcmF3VGV4dChjb250ZXh0LCB0ZXh0UHJvcCk7XG4gIC8vIHNhdmUgc3R5bGUgYmVmb3JlIG1vZGlmaWNhdGlvblxuICB2YXIgb2xkRm9udCA9IGNvbnRleHQuZm9udDtcbiAgdmFyIG9sZFN0eWxlID0gY29udGV4dC5maWxsU3R5bGU7XG4gIHZhciBvbGRPcGFjaXR5ID0gY29udGV4dC5nbG9iYWxBbHBoYTtcblxuICBjb250ZXh0LmZvbnQgPSBzdHlsZVsnZm9udC1zdHlsZSddICsgXCIgXCIgKyBzdHlsZVsnZm9udC13ZWlnaHQnXSArIFwiIFwiXG4gICAgICAgICAgICAgICAgICArIHN0eWxlWydmb250LXNpemUnXSArIFwicHggXCIgKyBzdHlsZVsnZm9udC1mYW1pbHknXTtcbiAgY29udGV4dC5maWxsU3R5bGUgPSBzdHlsZVsnZm9udC1jb2xvciddO1xuICBjb250ZXh0LnRleHRBbGlnbiA9IFwiY2VudGVyXCI7XG4gIGNvbnRleHQudGV4dEJhc2VsaW5lID0gXCJtaWRkbGVcIjtcbiAgY29udGV4dC5nbG9iYWxBbHBoYSA9IHBhcmVudC5jc3MoJ3RleHQtb3BhY2l0eScpICogcGFyZW50LmNzcygnb3BhY2l0eScpOyAvLyA/XG5cbiAgdmFyIHRleHQ7XG4gIGlmKG9wdGlvbnMuZml0TGFiZWxzVG9JbmZvYm94ZXMoKSl7XG4gICAgLy8gaGVyZSB3ZSBtZW1vaXplIHRoZSB0cnVuY2F0ZWQgdGV4dCBpbnRvIF90ZXh0Q2FjaGUsXG4gICAgLy8gYXMgaXQgaXMgbm90IHNvbWV0aGluZyB0aGF0IGNoYW5nZXMgc28gbXVjaFxuICAgIHRleHQgPSB1bml0Q2xhc3MuZ2V0VGV4dChtYWluT2JqLCBjeSk7XG4gICAgdmFyIGtleSA9IHRleHQgKyBjb250ZXh0LmZvbnQgKyBtYWluT2JqLmJib3gudztcbiAgICBpZihtYWluT2JqLl90ZXh0Q2FjaGUgJiYgbWFpbk9iai5fdGV4dENhY2hlW2tleV0pIHtcbiAgICAgIHRleHQgPSBtYWluT2JqLl90ZXh0Q2FjaGVba2V5XTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0ZXh0ID0gdHJ1bmNhdGUodW5pdENsYXNzLmdldFRleHQobWFpbk9iaiwgY3kpLCBjb250ZXh0LmZvbnQsIG1haW5PYmouYmJveC53KTtcbiAgICAgIGlmKCFtYWluT2JqLl90ZXh0Q2FjaGUpIHtcbiAgICAgICAgbWFpbk9iai5fdGV4dENhY2hlID0ge307XG4gICAgICB9XG4gICAgICBtYWluT2JqLl90ZXh0Q2FjaGVba2V5XSA9IHRleHQ7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRleHQgPSB1bml0Q2xhc3MuZ2V0VGV4dChtYWluT2JqLCBjeSk7XG4gIH1cblxuICBjb250ZXh0LmZpbGxUZXh0KHRleHQsIGNlbnRlclgsIGNlbnRlclkpO1xuXG4gIC8vIHJlc3RvcmUgc2F2ZWQgc3R5bGVcbiAgY29udGV4dC5maWxsU3R5bGUgPSBvbGRTdHlsZTtcbiAgY29udGV4dC5mb250ID0gb2xkRm9udDtcbiAgY29udGV4dC5nbG9iYWxBbHBoYSA9IG9sZE9wYWNpdHk7XG59O1xuXG5BdXhpbGlhcnlVbml0LmdldEFic29sdXRlQ29vcmQgPSBmdW5jdGlvbihtYWluT2JqLCBjeSkge1xuICB2YXIgcGFyZW50ID0gZ2V0QXV4VW5pdENsYXNzKG1haW5PYmopLmdldFBhcmVudChtYWluT2JqLCBjeSk7XG4gIHZhciBwb3NpdGlvbiA9IHBhcmVudC5wb3NpdGlvbigpO1xuICB2YXIgcGFkZGluZyA9IHBhcmVudC5wYWRkaW5nKCk7XG4gIC8qIGlmKHBhcmVudC5kYXRhKCkuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nKXtcbiAgICBwYWRkaW5nID0gTnVtYmVyKHBhcmVudC5kYXRhKCkuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nKTtcbiAgICAvL2RlbGV0ZSBwYXJlbnQuX3ByaXZhdGUuZGF0YS5jb21wbGV4Q2FsY3VsYXRlZFBhZGRpbmc7XG4gIH1lbHNle1xuICAgIHBhZGRpbmcgPSBwYXJlbnQucGFkZGluZygpO1xuICB9ICovXG4gIHZhciBwYXJlbnRXaWR0aCA9IHBhcmVudC53aWR0aCgpO1xuICB2YXIgcGFyZW50SGVpZ2h0ID0gcGFyZW50LmhlaWdodCgpO1xuICB2YXIgYm9yZGVyV2lkdGggPSBOdW1iZXIocGFyZW50LmNzcyhcImJvcmRlci13aWR0aFwiKS5yZXBsYWNlKFwicHhcIixcIlwiKSk7Ly9wYXJlbnQuZGF0YSgpWydib3JkZXItd2lkdGgnXTtcbiAgdmFyIHBvc2l0aW9uID0gcGFyZW50LnBvc2l0aW9uKCk7XG4gIGlmIChtYWluT2JqID09PSB1bmRlZmluZWQgfHwgcGFyZW50ID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgYm9yZGVyV2lkdGggPSBwYXJlbnQuZGF0YSgpW1wiYm9yZGVyLXdpZHRoXCJdO1xuICBpZiAoIGJvcmRlcldpZHRoID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYWJzWCAsIGFic1k7XG4gIGlmIChtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJ0b3BcIiB8fCBtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJib3R0b21cIikgeyAgICBcbiAgIFxuICAgIGFic1ggPSAoKG1haW5PYmouYmJveC54ICogKHBhcmVudC5vdXRlcldpZHRoKCkgLSBib3JkZXJXaWR0aCkpIC8gMTAwKSArIChwb3NpdGlvbi54IC0gcGFyZW50V2lkdGgvMiAtIHBhZGRpbmcpO1xuICAgIGFic1kgPSBtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJ0b3BcIiA/IHBvc2l0aW9uLnkgLSBwYXJlbnRIZWlnaHQvMiAtIHBhZGRpbmcgOiBwb3NpdGlvbi55ICsgcGFyZW50SGVpZ2h0LzIgKyBwYWRkaW5nIDtcbiAgIFxuICAgXG4gIH1cbiAgZWxzZSB7ICAgXG4gICAgYWJzWSA9ICgobWFpbk9iai5iYm94LnkgKiAocGFyZW50Lm91dGVySGVpZ2h0KCkgLSBib3JkZXJXaWR0aCkpIC8gMTAwKSArIChwb3NpdGlvbi55IC0gcGFyZW50SGVpZ2h0LzIgLSBwYWRkaW5nKTtcbiAgICBhYnNYID0gbWFpbk9iai5hbmNob3JTaWRlID09IFwibGVmdFwiID8gcG9zaXRpb24ueCAtIHBhcmVudFdpZHRoLzIgLSBwYWRkaW5nIDpwb3NpdGlvbi54ICsgcGFyZW50V2lkdGgvMiArIHBhZGRpbmc7ICBcbiAgICBcbiAgfVxuXG4gIFxuICAvLyBkdWUgdG8gY29ybmVyIG9mIGJhcnJlbCBzaGFwZWQgY29tcGFydG1lbnQgc2hpZnQgYWJzWCB0byByaWdodFxuIC8qICBpZiAocGFyZW50LmRhdGEoXCJjbGFzc1wiKSA9PSBcImNvbXBhcnRtZW50XCIpe1xuICAgICAgYWJzWCArPSBwYXJlbnQub3V0ZXJXaWR0aCgpICogMC4xO1xuICB9ICovXG5cbiAgcmV0dXJuIHt4OiBhYnNYLCB5OiBhYnNZfTtcbiAgXG59O1xuXG5BdXhpbGlhcnlVbml0LmNvbnZlcnRUb0Fic29sdXRlQ29vcmQgPSBmdW5jdGlvbihtYWluT2JqLCByZWxYLCByZWxZLCBjeSkge1xuICB2YXIgcGFyZW50ID0gZ2V0QXV4VW5pdENsYXNzKG1haW5PYmopLmdldFBhcmVudChtYWluT2JqLCBjeSk7XG4gIHZhciBwb3NpdGlvbiA9IHBhcmVudC5wb3NpdGlvbigpO1xuICB2YXIgcGFkZGluZyA9IHBhcmVudC5wYWRkaW5nKCk7XG4gIHZhciBwYXJlbnRXaWR0aCA9IHBhcmVudC53aWR0aCgpO1xuICB2YXIgcGFyZW50SGVpZ2h0ID0gcGFyZW50LmhlaWdodCgpO1xuICB2YXIgYm9yZGVyV2lkdGggPSBOdW1iZXIocGFyZW50LmNzcyhcImJvcmRlci13aWR0aFwiKS5yZXBsYWNlKFwicHhcIixcIlwiKSk7XG5cblxuICB2YXIgYWJzWCAsIGFic1k7XG4gIGlmIChtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJ0b3BcIiB8fCBtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJib3R0b21cIikgeyAgICBcbiAgIFxuICAgIGFic1ggPSAoKHJlbFggKiAocGFyZW50Lm91dGVyV2lkdGgoKSAtIGJvcmRlcldpZHRoKSkgLyAxMDApICsgKHBvc2l0aW9uLnggLSBwYXJlbnRXaWR0aC8yIC0gcGFkZGluZyk7XG4gICAgYWJzWSA9IG1haW5PYmouYW5jaG9yU2lkZSA9PSBcInRvcFwiID8gcG9zaXRpb24ueSAtIHBhcmVudEhlaWdodC8yIC0gcGFkZGluZyA6IHBvc2l0aW9uLnkgKyBwYXJlbnRIZWlnaHQvMiArIHBhZGRpbmc7XG4gICBcbiAgIFxuICB9XG4gIGVsc2UgeyAgIFxuICAgICBhYnNZID0gKChyZWxZICogKHBhcmVudC5vdXRlckhlaWdodCgpIC0gYm9yZGVyV2lkdGgpKSAvIDEwMCkgKyAocG9zaXRpb24ueSAtIHBhcmVudEhlaWdodC8yIC0gcGFkZGluZyk7XG4gICAgIGFic1ggPSBtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJsZWZ0XCIgPyBwb3NpdGlvbi54IC0gcGFyZW50V2lkdGgvMiAtIHBhZGRpbmcgOnBvc2l0aW9uLnggKyBwYXJlbnRXaWR0aC8yICsgcGFkZGluZzsgICBcbiAgICBcbiAgfVxuXG4gLyogIGlmIChwYXJlbnQuZGF0YShcImNsYXNzXCIpID09IFwiY29tcGFydG1lbnRcIil7XG4gICAgYWJzWCArPSBwYXJlbnQub3V0ZXJXaWR0aCgpICogMC4xO1xuICB9OyAqL1xuICByZXR1cm4ge3g6IGFic1gsIHk6IGFic1l9OyBcbn07XG5cbkF1eGlsaWFyeVVuaXQuY29udmVydFRvUmVsYXRpdmVDb29yZCA9IGZ1bmN0aW9uKG1haW5PYmosIGFic1gsIGFic1ksIGN5LCBwYXJlbnROb2RlKXtcbiAgaWYgKG1haW5PYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocGFyZW50Tm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudE5vZGU7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIHBhcmVudCA9IGdldEF1eFVuaXRDbGFzcyhtYWluT2JqKS5nZXRQYXJlbnQobWFpbk9iaiwgY3kpO1xuICB9XG4gIHZhciBwb3NpdGlvbiA9IHBhcmVudC5wb3NpdGlvbigpO1xuICB2YXIgcGFyZW50V2lkdGggPSBwYXJlbnQud2lkdGgoKTtcbiAgdmFyIHBhcmVudEhlaWdodCA9IHBhcmVudC5oZWlnaHQoKTtcbiAgdmFyIHBhZGRpbmcgPSBwYXJlbnQucGFkZGluZygpO1xuIC8qICBpZihwYXJlbnQuZGF0YSgpLmNvbXBsZXhDYWxjdWxhdGVkUGFkZGluZyl7XG4gICAgcGFkZGluZyA9IE51bWJlcihwYXJlbnQuZGF0YSgpLmNvbXBsZXhDYWxjdWxhdGVkUGFkZGluZylcbiAgfWVsc2V7XG4gICAgcGFkZGluZyA9IHBhcmVudC5wYWRkaW5nKCk7XG4gIH0gKi9cbiBcbiBcbiBcbiBcbiAgdmFyIGJvcmRlcldpZHRoID0gTnVtYmVyKHBhcmVudC5jc3MoXCJib3JkZXItd2lkdGhcIikucmVwbGFjZShcInB4XCIsXCJcIikpO1xuXG5cbiAgLyogaWYgKHBhcmVudC5kYXRhKFwiY2xhc3NcIikgPT0gXCJjb21wYXJ0bWVudFwiKXtcbiAgICBhYnNYIC09IHBhcmVudC5vdXRlcldpZHRoKCkgKiAwLjE7XG4gIH0gKi9cblxuICB2YXIgcmVsWCAsIHJlbFk7XG4gIGlmIChtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJ0b3BcIiB8fCBtYWluT2JqLmFuY2hvclNpZGUgPT0gXCJib3R0b21cIikge1xuICAgIFxuICAgXG4gICAgcmVsWCA9ICgoYWJzWCAtIChwb3NpdGlvbi54IC0gcGFyZW50V2lkdGgvMiAtIHBhZGRpbmcpKSAqIDEwMCApLyAocGFyZW50Lm91dGVyV2lkdGgoKSAtIGJvcmRlcldpZHRoKTtcbiAgICByZWxZID0gbWFpbk9iai5hbmNob3JTaWRlID09IFwidG9wXCIgPyAwIDogMTAwO1xuICB9XG4gIGVsc2Uge1xuICAgXG4gICAgcmVsWCA9IG1haW5PYmouYW5jaG9yU2lkZSA9PSBcImxlZnRcIiA/IDAgOiAxMDA7XG4gICAgcmVsWSA9ICgoYWJzWSAtIChwb3NpdGlvbi55IC0gcGFyZW50SGVpZ2h0LzIgLSBwYWRkaW5nKSkgKiAxMDApIC8gKHBhcmVudC5vdXRlckhlaWdodCgpIC0gYm9yZGVyV2lkdGgpO1xuICAgXG4gIH1cbiAgcmVsWCA9IHJlbFggPCAwID8gMCA6IHJlbFg7XG4gIHJlbFggPSByZWxYID4gMTAwID8gMTAwIDogcmVsWDtcbiAgcmVsWSA9IHJlbFkgPCAwID8gMCA6IHJlbFk7XG4gIHJlbFkgPSByZWxZID4gMTAwID8gMTAwIDogcmVsWTtcblxuICBcbiAgcmV0dXJuIHt4OiByZWxYLCB5OiByZWxZfTtcbiAgXG4gIFxufTtcblxuQXV4aWxpYXJ5VW5pdC5zZXRBbmNob3JTaWRlID0gZnVuY3Rpb24obWFpbk9iaiwgbm9kZSkge1xuXG4gIHZhciB0aGlzWCA9IG1haW5PYmouYmJveC54O1xuICB2YXIgdGhpc1kgPSBtYWluT2JqLmJib3gueTtcbiAgdmFyIHRoaXNIID0gbWFpbk9iai5iYm94Lmg7XG4gIHZhciB0aGlzVyA9IG1haW5PYmouYmJveC53O1xuICB2YXIgd2lkdGgsIGhlaWdodCwgcGFkZGluZztcbiAgaWYobm9kZS5kYXRhKFwib3JpZ2luYWxXXCIpKXtcbiAgICB3aWR0aCA9IG5vZGUuZGF0YShcIm9yaWdpbmFsV1wiKTsgICAgXG4gICAgcGFkZGluZyA9IDA7XG4gIH1lbHNle1xuICAgIHdpZHRoID0gbm9kZS53aWR0aCgpO1xuICAgIHBhZGRpbmcgPSBub2RlLmRhdGEoJ2NsYXNzJykgPT0gXCJjb21wbGV4XCIgPyBOdW1iZXIobm9kZS5kYXRhKCkuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nKSA6IG5vZGUucGFkZGluZygpO1xuICB9XG5cbiAgaWYobm9kZS5kYXRhKFwib3JpZ2luYWxIXCIpKXtcbiAgICBoZWlnaHQgPSBub2RlLmRhdGEoXCJvcmlnaW5hbEhcIik7ICAgIFxuICAgIHBhZGRpbmcgPSAwO1xuICB9ZWxzZXtcbiAgICBoZWlnaHQgPSBub2RlLmhlaWdodCgpO1xuICAgIHBhZGRpbmcgPSBub2RlLmRhdGEoJ2NsYXNzJykgPT0gXCJjb21wbGV4XCIgPyBOdW1iZXIobm9kZS5kYXRhKCkuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nKSA6IG5vZGUucGFkZGluZygpO1xuICB9XG4gIFxuIFxuICBcbiAgdmFyIHBhcmVudFggPSAobm9kZS5kYXRhKCdjbGFzcycpID09IFwiY29tcGFydG1lbnRcIiB8fCBub2RlLmRhdGEoJ2NsYXNzJykgPT0gXCJjb21wbGV4XCIpID8gbm9kZS5kYXRhKCdiYm94JykueCA6IG5vZGUucG9zaXRpb24oKS54O1xuICB2YXIgcGFyZW50WSA9IChub2RlLmRhdGEoJ2NsYXNzJykgPT0gXCJjb21wYXJ0bWVudFwiIHx8IG5vZGUuZGF0YSgnY2xhc3MnKSA9PSBcImNvbXBsZXhcIikgPyBub2RlLmRhdGEoJ2Jib3gnKS55IDogbm9kZS5wb3NpdGlvbigpLnk7XG4gIHZhciBwYXJlbnRYMSA9IE51bWJlcigocGFyZW50WCAtIHdpZHRoIC8gMiAtIHBhZGRpbmcpLnRvRml4ZWQoMikpO1xuICB2YXIgcGFyZW50WDIgPSBOdW1iZXIoKHBhcmVudFgrd2lkdGgvMiArIHBhZGRpbmcpLnRvRml4ZWQoMikpO1xuICB2YXIgcGFyZW50WTEgPSBOdW1iZXIoKHBhcmVudFkgLSBoZWlnaHQvIDIgLSBwYWRkaW5nKS50b0ZpeGVkKDIpKTtcbiAgdmFyIHBhcmVudFkyID0gTnVtYmVyKChwYXJlbnRZICsgaGVpZ2h0LyAyKyBwYWRkaW5nKS50b0ZpeGVkKDIpKTtcbiAgdmFyIGNlbnRlclggPSBOdW1iZXIoKHRoaXNYK3RoaXNXLzIpLnRvRml4ZWQoMikpO1xuICB2YXIgY2VudGVyWSA9IE51bWJlcigodGhpc1krdGhpc0gvMikudG9GaXhlZCgyKSk7XG5cblxuICBpZiAoY2VudGVyWSA9PXBhcmVudFkxKXtcbiAgICBtYWluT2JqLmFuY2hvclNpZGUgPSBcInRvcFwiO1xuICB9XG4gIGVsc2UgaWYgKGNlbnRlclkgPT0gcGFyZW50WTIpIHtcbiAgICBtYWluT2JqLmFuY2hvclNpZGUgPSBcImJvdHRvbVwiO1xuICB9XG4gIGVsc2UgaWYoY2VudGVyWCA9PSBwYXJlbnRYMSkge1xuICAgIG1haW5PYmouYW5jaG9yU2lkZSA9IFwibGVmdFwiO1xuICB9XG4gIGVsc2UgaWYoKGNlbnRlclggIDw9ICAocGFyZW50WDIgKyAyKSkgICYmIChjZW50ZXJYICA+PSAgKHBhcmVudFgyIC0gMikpICl7XG4gICAgbWFpbk9iai5hbmNob3JTaWRlID0gXCJyaWdodFwiO1xuICB9ZWxzZXtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcblxufTtcblxuXG5cbkF1eGlsaWFyeVVuaXQuYWRkVG9QYXJlbnQgPSBmdW5jdGlvbiAobWFpbk9iaiwgY3ksIHBhcmVudE5vZGUsIGxvY2F0aW9uLCBwb3NpdGlvbiwgaW5kZXgpIHtcblxuICAvLyBhZGQgc3RhdGUgdmFyIHRvIHRoZSBwYXJlbnQncyBzdGF0ZXNhbmRpbmZvc1xuICBpZih0eXBlb2YgaW5kZXggIT0gXCJ1bmRlZmluZWRcIikgeyAvLyBzcGVjaWZpYyBpbmRleCBwcm92aWRlZCAoZm9yIHVuZG8vcmVkbyBjb25zaXN0ZW5jeSlcbiAgICBwYXJlbnROb2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykuc3BsaWNlKGluZGV4LCAwLCBtYWluT2JqKTtcbiAgfVxuICBlbHNlIHtcbiAgICBwYXJlbnROb2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykucHVzaChtYWluT2JqKTtcbiAgfVxuXG4gIGlmKCFwYXJlbnROb2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykpIHsgLy8gZW5zdXJlIG1pbmltYWwgaW5pdGlhbGl6YXRpb25cbiAgICBwYXJlbnROb2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJywge30pO1xuICB9XG4gIGlmKCFsb2NhdGlvbikgeyAvLyBsb2NhdGlvbiBub3QgcHJvdmlkZWQsIG5lZWQgdG8gZGVmaW5lIGl0IGF1dG9tYXRpY2FsbHlcbiAgICBsb2NhdGlvbiA9IEF1eFVuaXRMYXlvdXQuc2VsZWN0TmV4dEF2YWlsYWJsZShwYXJlbnROb2RlLCBjeSk7XG4gIH1cbiAgLy8gaGVyZSB3ZSBhcmUgc3VyZSB0byBoYXZlIGEgbG9jYXRpb24gZXZlbiBpZiBpdCB3YXMgbm90IHByb3ZpZGVkIGFzIGFyZ3VtZW50XG4gIC8vIGdldCBvciBjcmVhdGUgdGhlIG5lY2Vzc2FyeSBsYXlvdXRcbiAgaWYoIXBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl0pIHtcbiAgICBwYXJlbnROb2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbG9jYXRpb25dID0gQXV4VW5pdExheW91dC5jb25zdHJ1Y3QocGFyZW50Tm9kZSwgbG9jYXRpb24pO1xuICB9XG5cbiAgdmFyIGxheW91dCA9IHBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl07XG4gIG1haW5PYmouYW5jaG9yU2lkZSA9IGxvY2F0aW9uO1xuICBzd2l0Y2gobG9jYXRpb24pIHtcbiAgICBjYXNlIFwidG9wXCI6IG1haW5PYmouYmJveC55ID0gMDsgYnJlYWs7XG4gICAgY2FzZSBcImJvdHRvbVwiOiBtYWluT2JqLmJib3gueSA9IDEwMDsgYnJlYWs7XG4gICAgY2FzZSBcImxlZnRcIjogbWFpbk9iai5iYm94LnggPSAwOyBicmVhaztcbiAgICBjYXNlIFwicmlnaHRcIjogbWFpbk9iai5iYm94LnggPSAxMDA7IGJyZWFrO1xuICB9XG4gIC8vIGFkZCBzdGF0ZVZhciB0byBsYXlvdXQsIHByZWNvbXB1dGluZyBvZiByZWxhdGl2ZSBjb29yZHMgd2lsbCBiZSB0cmlnZ2VyZWQgYWNjb3JkaW5nbHlcbiAgdmFyIGluc2VydGVkUG9zaXRpb24gPSBBdXhVbml0TGF5b3V0LmFkZEF1eFVuaXQobGF5b3V0LCBjeSwgbWFpbk9iaiwgcG9zaXRpb24pO1xuICByZXR1cm4gaW5zZXJ0ZWRQb3NpdGlvbjtcbn1cblxuQXV4aWxpYXJ5VW5pdC5yZW1vdmVGcm9tUGFyZW50ID0gZnVuY3Rpb24gKG1haW5PYmosIGN5KSB7XG4gIHZhciBwYXJlbnQgPSBnZXRBdXhVbml0Q2xhc3MobWFpbk9iaikuZ2V0UGFyZW50KG1haW5PYmosIGN5KTtcbiAgdmFyIHBhcmVudExheW91dCA9IHBhcmVudC5kYXRhKCdhdXh1bml0bGF5b3V0cycpW21haW5PYmouYW5jaG9yU2lkZV07XG4gIEF1eFVuaXRMYXlvdXQucmVtb3ZlQXV4VW5pdChwYXJlbnRMYXlvdXQsIGN5LCBtYWluT2JqKTtcbiAgaWYgKEF1eFVuaXRMYXlvdXQuaXNFbXB0eShwYXJlbnRMYXlvdXQpKXtcbiAgICBkZWxldGUgcGFyZW50LmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbWFpbk9iai5hbmNob3JTaWRlXTtcbiAgfVxuICB2YXIgc3RhdGVzYW5kaW5mb3MgPSBwYXJlbnQuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKTtcbiAgdmFyIGluZGV4ICA9IHN0YXRlc2FuZGluZm9zLmluZGV4T2YobWFpbk9iaik7XG4gIHN0YXRlc2FuZGluZm9zLnNwbGljZShpbmRleCwgMSk7XG59O1xuXG5BdXhpbGlhcnlVbml0LmdldFBvc2l0aW9uSW5kZXggPSBmdW5jdGlvbihtYWluT2JqLCBjeSkge1xuICByZXR1cm4gZ2V0QXV4VW5pdENsYXNzKG1haW5PYmopLmdldFBhcmVudChtYWluT2JqLCBjeSkuZGF0YSgnYXV4dW5pdGxheW91dHMnKVttYWluT2JqLmFuY2hvclNpZGVdLnVuaXRzLmluZGV4T2YobWFpbk9iaik7XG59O1xuXG5ucy5BdXhpbGlhcnlVbml0ID0gQXV4aWxpYXJ5VW5pdDtcbi8vIC0tLS0tLS0tLS0tLS0tIEVORCBBdXhpbGlhcnlVbml0IC0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tIFN0YXRlVmFyaWFibGUgLS0tLS0tLS0tLS0tLS0gLy9cbi8qKlxuICogcGFyZW50IGhhcyB0byBiZSBhIHN0YXRlZnVsIEVQTiAoY29tcGxleCwgbWFjcm9tb2xlY3VsZSBvciBudWNsZWljIGFjaWQpXG4gKi9cblxudmFyIFN0YXRlVmFyaWFibGUgPSB7fTtcblxuLy8gU3RhdGVWYXJpYWJsZSBleHRlbmRzIEF1eGlsaWFyeVVuaXQgYnkgaW5oZXJpdGluZyBlYWNoIHN0YXRpYyBwcm9wZXJ0eSBvZiBpdFxuZm9yICh2YXIgcHJvcCBpbiBBdXhpbGlhcnlVbml0KSB7XG4gIFN0YXRlVmFyaWFibGVbcHJvcF0gPSBBdXhpbGlhcnlVbml0W3Byb3BdO1xufVxuXG4vLyBDb25zdHJ1Y3QgYSBzdGF0ZSB2YXJpYWJsZSBvYmplY3QgYnkgZXh0ZW5kaW5nIGRlZmF1bHQgYmVoYXZpb3VycyBvZiBhIEF1eGlsaWFyeVVuaXQgb2JqZWN0IGFuZCByZXR1cm5zIHRoYXQgb2JqZWN0XG5TdGF0ZVZhcmlhYmxlLmNvbnN0cnVjdCA9IGZ1bmN0aW9uKHZhbHVlLCBzdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiwgcGFyZW50LCBpZCkge1xuICB2YXIgb2JqID0gQXV4aWxpYXJ5VW5pdC5jb25zdHJ1Y3QocGFyZW50KTtcbiAgb2JqLmlkID0gaWQgfHwgZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZVN0YXRlVmFySWQoKTtcbiAgb2JqLnN0YXRlID0ge307XG4gIG9iai5zdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBvYmouc3RhdGUudmFyaWFibGUgPSBudWxsO1xuICBvYmouc3RhdGVWYXJpYWJsZURlZmluaXRpb24gPSBzdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbjtcbiAgb2JqLmNsYXp6ID0gXCJzdGF0ZSB2YXJpYWJsZVwiO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5TdGF0ZVZhcmlhYmxlLmdldFRleHQgPSBmdW5jdGlvbihtYWluT2JqKSB7XG4gIHZhciBzdGF0ZVZhbHVlID0gbWFpbk9iai5zdGF0ZS52YWx1ZSB8fCAnJztcbiAgdmFyIHN0YXRlVmFyaWFibGUgPSBtYWluT2JqLnN0YXRlLnZhcmlhYmxlID8gXCJAXCIgKyBtYWluT2JqLnN0YXRlLnZhcmlhYmxlIDogXCJcIjtcblxuICByZXR1cm4gc3RhdGVWYWx1ZSArIHN0YXRlVmFyaWFibGU7XG59O1xuXG5TdGF0ZVZhcmlhYmxlLmhhc1RleHQgPSBmdW5jdGlvbihtYWluT2JqKSB7XG4gIHJldHVybiAobWFpbk9iai5zdGF0ZS52YWx1ZSAmJiBtYWluT2JqLnN0YXRlLnZhbHVlICE9IFwiXCIpIHx8IChtYWluT2JqLnN0YXRlLnZhcmlhYmxlICYmIG1haW5PYmouc3RhdGUudmFyaWFibGUgIT0gXCJcIik7XG59O1xuXG4vKnRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHVwb24gY3JlYXRpb24gb2Ygc3RhdGUgdmFyaWFibGUgYW5kIGl0IHJldHVybnMgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIG9mIHRoZSBhZGRlZCBzdGF0ZSB2YXJpYWJsZVxuKi9cblN0YXRlVmFyaWFibGUuY3JlYXRlID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgY3ksIHZhbHVlLCB2YXJpYWJsZSwgYmJveCwgbG9jYXRpb24sIHBvc2l0aW9uLCBzdHlsZSwgaW5kZXgsIGlkKSB7XG4gIC8vIGNyZWF0ZSB0aGUgbmV3IHN0YXRlIHZhciBvZiBpbmZvXG4gIHZhciBzdGF0ZVZhciA9IFN0YXRlVmFyaWFibGUuY29uc3RydWN0KCk7XG4gIFN0YXRlVmFyaWFibGUuc2V0UGFyZW50UmVmKHN0YXRlVmFyLCBwYXJlbnROb2RlKTtcblxuICBzdGF0ZVZhci52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZVZhci52YXJpYWJsZSA9IHZhcmlhYmxlO1xuICBzdGF0ZVZhci5zdGF0ZSA9IHt2YWx1ZTogdmFsdWUsIHZhcmlhYmxlOiB2YXJpYWJsZX07XG4gIHN0YXRlVmFyLmJib3ggPSBiYm94O1xuICBzdGF0ZVZhci5zdHlsZSA9IHN0eWxlO1xuICBpZiAoIGlkICkge1xuICAgIHN0YXRlVmFyLmlkID0gaWQ7XG4gIH1cbiAgLy8gbGluayB0byBsYXlvdXRcbiAgcG9zaXRpb24gPSBTdGF0ZVZhcmlhYmxlLmFkZFRvUGFyZW50KHN0YXRlVmFyLCBjeSwgcGFyZW50Tm9kZSwgbG9jYXRpb24sIHBvc2l0aW9uLCBpbmRleCk7XG4gIHJldHVybiB7XG4gICAgaW5kZXg6IFN0YXRlVmFyaWFibGUuZ2V0UGFyZW50KHN0YXRlVmFyLCBjeSkuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5pbmRleE9mKHN0YXRlVmFyKSxcbiAgICBsb2NhdGlvbjogc3RhdGVWYXIuYW5jaG9yU2lkZSxcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfVxuXG59O1xuXG5TdGF0ZVZhcmlhYmxlLnJlbW92ZSA9IGZ1bmN0aW9uIChtYWluT2JqLCBjeSkge1xuICB2YXIgcG9zaXRpb24gPSBTdGF0ZVZhcmlhYmxlLmdldFBvc2l0aW9uSW5kZXgobWFpbk9iaiwgY3kpO1xuICB2YXIgaW5kZXggPSBTdGF0ZVZhcmlhYmxlLmdldFBhcmVudChtYWluT2JqLCBjeSkuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5pbmRleE9mKG1haW5PYmopO1xuICBTdGF0ZVZhcmlhYmxlLnJlbW92ZUZyb21QYXJlbnQobWFpbk9iaiwgY3kpO1xuICAvL2NvbnNvbGUubG9nKFwiYWZ0ZXIgcmVtb3ZlXCIsIHRoaXMucGFyZW50LmRhdGEoJ2F1eHVuaXRsYXlvdXRzJyksIHRoaXMucGFyZW50LmRhdGEoJ3N0YXRlc2FuZGluZm9zJykpO1xuICByZXR1cm4ge1xuICAgIGNsYXp6OiBcInN0YXRlIHZhcmlhYmxlXCIsXG4gICAgc3RhdGU6IHtcbiAgICAgIHZhbHVlOiBtYWluT2JqLnN0YXRlLnZhbHVlLFxuICAgICAgdmFyaWFibGU6IG1haW5PYmouc3RhdGUudmFyaWFibGVcbiAgICB9LFxuICAgIGJib3g6IHtcbiAgICAgIHc6IG1haW5PYmouYmJveC53LFxuICAgICAgaDogbWFpbk9iai5iYm94LmhcbiAgICB9LFxuICAgIGxvY2F0aW9uOiBtYWluT2JqLmFuY2hvclNpZGUsXG4gICAgcG9zaXRpb246IHBvc2l0aW9uLFxuICAgIGluZGV4OiBpbmRleCxcbiAgICBzdHlsZSA6IG1haW5PYmouc3R5bGVcbiAgfTtcbn07XG5cblN0YXRlVmFyaWFibGUuY29weSA9IGZ1bmN0aW9uKG1haW5PYmosIGN5LCBuZXdQYXJlbnQsIG5ld0lkKSB7XG4gIHZhciBuZXdTdGF0ZVZhciA9IEF1eGlsaWFyeVVuaXQuY29weShtYWluT2JqLCBjeSwgU3RhdGVWYXJpYWJsZS5jb25zdHJ1Y3QoKSwgbmV3UGFyZW50LCBuZXdJZCk7XG4gIG5ld1N0YXRlVmFyLnN0YXRlID0galF1ZXJ5LmV4dGVuZCh0cnVlLCB7fSwgbWFpbk9iai5zdGF0ZSk7XG4gIG5ld1N0YXRlVmFyLnN0YXRlVmFyaWFibGVEZWZpbml0aW9uID0gbWFpbk9iai5zdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbjtcbiAgbmV3U3RhdGVWYXIuY2xhenogPSBtYWluT2JqLmNsYXp6O1xuICByZXR1cm4gbmV3U3RhdGVWYXI7XG59O1xuXG5ucy5TdGF0ZVZhcmlhYmxlID0gU3RhdGVWYXJpYWJsZTtcbi8vIC0tLS0tLS0tLS0tLS0tIEVORCBTdGF0ZVZhcmlhYmxlIC0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tIFVuaXRPZkluZm9ybWF0aW9uIC0tLS0tLS0tLS0tLS0tIC8vXG4vKipcbiAqIHBhcmVudCBjYW4gYmUgYW4gRVBOLCBjb21wYXJ0bWVudCBvciBzdWJ1bml0XG4gKi9cblxudmFyIFVuaXRPZkluZm9ybWF0aW9uID0ge307XG5cbi8vIFVuaXRPZkluZm9ybWF0aW9uIGV4dGVuZHMgQXV4aWxpYXJ5VW5pdCBieSBpbmhlcml0aW5nIGVhY2ggc3RhdGljIHByb3BlcnR5IG9mIGl0XG5mb3IgKHZhciBwcm9wIGluIEF1eGlsaWFyeVVuaXQpIHtcbiAgVW5pdE9mSW5mb3JtYXRpb25bcHJvcF0gPSBBdXhpbGlhcnlVbml0W3Byb3BdO1xufVxuXG4vLyBDb25zdHJ1Y3RzIGEgVW5pdE9mSW5mb3JtYXRpb24gb2JqZWN0IGJ5IGV4dGVuZGluZyBwcm9wZXJ0aWVzIG9mIGFuIEF1eGlsaWFyeVVuaXQgb2JqZWN0IGFuZCByZXR1cm4gdGhhdCBvYmplY3RcblVuaXRPZkluZm9ybWF0aW9uLmNvbnN0cnVjdCA9IGZ1bmN0aW9uKHZhbHVlLCBwYXJlbnQsIGlkKSB7XG4gIHZhciBvYmogPSBBdXhpbGlhcnlVbml0LmNvbnN0cnVjdChwYXJlbnQpO1xuICBvYmouaWQgPSBpZCB8fCBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlVW5pdE9mSW5mb0lkKCk7XG4gIG9iai5sYWJlbCA9IHt0ZXh0OiB2YWx1ZX07IC8vIGZyb20gbGVnYWN5IGNvZGUsIGNvbnRhaW5zIHt0ZXh0OiB9XG4gIG9iai5jbGF6eiA9IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5Vbml0T2ZJbmZvcm1hdGlvbi5nZXRUZXh0ID0gZnVuY3Rpb24obWFpbk9iaikge1xuICByZXR1cm4gbWFpbk9iai5sYWJlbC50ZXh0O1xufTtcblxuVW5pdE9mSW5mb3JtYXRpb24uaGFzVGV4dCA9IGZ1bmN0aW9uKG1haW5PYmopIHtcbiAgcmV0dXJuIG1haW5PYmoubGFiZWwudGV4dCAmJiBtYWluT2JqLmxhYmVsLnRleHQgIT0gXCJcIjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIHVuaXQgb2YgaW5mbyBhbmQgbGlua3MgZXZlcnl0aGluZyBhY2NvcmRpbmdseVxuICogQHBhcmFtIHBhcmVudE5vZGUgLSB0aGUgY3l0b3NjYXBlIGVsZW1lbnQgaG9zdGluZyB0aGUgdW5pdCBvZiBpbmZvcm1hdGlvblxuICogQHBhcmFtIHZhbHVlIC0gaXRzIHRleHRcbiAqIEBwYXJhbSBbbG9jYXRpb25dIC0gdGhlIHNpZGUgd2hlcmUgaXQgd2lsbCBiZSBwbGFjZWQgdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0IG9yIHVuZGVmaW5lZCAoYXV0byBwbGFjZW1lbnQpXG4gKiBAcGFyYW0gW3Bvc2l0aW9uXSAtIGl0cyBwb3NpdGlvbiBpbiB0aGUgb3JkZXIgb2YgZWxlbWVudHMgcGxhY2VkIG9uIHRoZSBzYW1lIGxvY2F0aW9uXG4gKiBAcGFyYW0gW2luZGV4XSAtIGl0cyBpbmRleCBpbiB0aGUgc3RhdGVzYW5kaW5mb3MgbGlzdFxuICovXG5Vbml0T2ZJbmZvcm1hdGlvbi5jcmVhdGUgPSBmdW5jdGlvbiAocGFyZW50Tm9kZSwgY3ksIHZhbHVlLCBiYm94LCBsb2NhdGlvbiwgcG9zaXRpb24sIHN0eWxlLCBpbmRleCwgaWQpIHtcbiAgLy8gY3JlYXRlIHRoZSBuZXcgdW5pdCBvZiBpbmZvXG4gIHZhciB1bml0ID0gVW5pdE9mSW5mb3JtYXRpb24uY29uc3RydWN0KHZhbHVlLCBwYXJlbnROb2RlKTtcbiAgdW5pdC5iYm94ID0gYmJveDtcbiAgdW5pdC5zdHlsZSA9IHN0eWxlO1xuICBpZiAoIGlkICkge1xuICAgIHVuaXQuaWQgPSBpZDtcbiAgfVxuXG4gIC8vY29uc29sZS5sb2coXCJ3aWxsIGluc2VydCBvblwiLCBsb2NhdGlvbiwgcG9zaXRpb24pO1xuICBwb3NpdGlvbiA9IFVuaXRPZkluZm9ybWF0aW9uLmFkZFRvUGFyZW50KHVuaXQsIGN5LCBwYXJlbnROb2RlLCBsb2NhdGlvbiwgcG9zaXRpb24sIGluZGV4KTtcblxuICByZXR1cm4ge1xuICAgIGluZGV4OiBVbml0T2ZJbmZvcm1hdGlvbi5nZXRQYXJlbnQodW5pdCwgY3kpLmRhdGEoJ3N0YXRlc2FuZGluZm9zJykuaW5kZXhPZih1bml0KSxcbiAgICBsb2NhdGlvbjogdW5pdC5hbmNob3JTaWRlLFxuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9XG59O1xuXG5Vbml0T2ZJbmZvcm1hdGlvbi5yZW1vdmUgPSBmdW5jdGlvbiAobWFpbk9iaiwgY3kpIHtcbiAgdmFyIHBvc2l0aW9uID0gVW5pdE9mSW5mb3JtYXRpb24uZ2V0UG9zaXRpb25JbmRleChtYWluT2JqLCBjeSk7XG4gIHZhciBpbmRleCA9IFVuaXRPZkluZm9ybWF0aW9uLmdldFBhcmVudChtYWluT2JqLCBjeSkuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5pbmRleE9mKG1haW5PYmopO1xuICBVbml0T2ZJbmZvcm1hdGlvbi5yZW1vdmVGcm9tUGFyZW50KG1haW5PYmosIGN5KTtcbiAgLy9jb25zb2xlLmxvZyhcImFmdGVyIHJlbW92ZVwiLCB0aGlzLnBhcmVudC5kYXRhKCdhdXh1bml0bGF5b3V0cycpLCB0aGlzLnBhcmVudC5kYXRhKCdzdGF0ZXNhbmRpbmZvcycpKTtcbiAgcmV0dXJuIHtcbiAgICBjbGF6ejogXCJ1bml0IG9mIGluZm9ybWF0aW9uXCIsXG4gICAgbGFiZWw6IHtcbiAgICAgIHRleHQ6IG1haW5PYmoubGFiZWwudGV4dFxuICAgIH0sXG4gICAgYmJveDoge1xuICAgICAgdzogbWFpbk9iai5iYm94LncsXG4gICAgICBoOiBtYWluT2JqLmJib3guaFxuICAgIH0sXG4gICAgbG9jYXRpb246IG1haW5PYmouYW5jaG9yU2lkZSxcbiAgICBwb3NpdGlvbjogcG9zaXRpb24sXG4gICAgaW5kZXg6IGluZGV4LFxuICAgIHN0eWxlOiBtYWluT2JqLnN0eWxlXG4gIH07XG59O1xuXG5Vbml0T2ZJbmZvcm1hdGlvbi5jb3B5ID0gZnVuY3Rpb24obWFpbk9iaiwgY3ksIG5ld1BhcmVudCwgbmV3SWQpIHtcbiAgdmFyIG5ld1VuaXRPZkluZm8gPSBBdXhpbGlhcnlVbml0LmNvcHkobWFpbk9iaiwgY3ksIFVuaXRPZkluZm9ybWF0aW9uLmNvbnN0cnVjdCgpLCBuZXdQYXJlbnQsIG5ld0lkKTtcbiAgbmV3VW5pdE9mSW5mby5sYWJlbCA9IGpRdWVyeS5leHRlbmQodHJ1ZSwge30sIG1haW5PYmoubGFiZWwpO1xuICBuZXdVbml0T2ZJbmZvLmNsYXp6ID0gbWFpbk9iai5jbGF6ejtcbiAgcmV0dXJuIG5ld1VuaXRPZkluZm87XG59O1xuXG5ucy5Vbml0T2ZJbmZvcm1hdGlvbiA9IFVuaXRPZkluZm9ybWF0aW9uO1xuLy8gLS0tLS0tLS0tLS0tLS0gRU5EIFVuaXRPZkluZm9ybWF0aW9uIC0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tIEVudGl0eVR5cGUgLS0tLS0tLS0tLS0tLS0gLy9cbi8qKlxuICogVGhlIHR5cGUgb2YgdGhlIEVQTiwgZm9yIGV4YW1wbGUgdGhlcmUgY2FuIGJlIHNldmVyYWxzIG15b3NpbiBFUE4sIGJ1dCBvbmx5IG9uZSBteW9zaW4gRW50aXR5VHlwZVxuICogVGhpcyBjbGFzcyB3aWxsIGhvbGQgdGhlIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBzdGF0ZSB2YXJpYWJsZSwgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gYWxsIG15b3NpbnNcbiAqL1xuXG52YXIgRW50aXR5VHlwZSA9IHt9O1xuXG4vLyBDb25zdHJ1Y3RzIGFuIEVudGl0eVR5cGUgb2JqZWN0IGFuZCByZXR1cm5zIGl0XG5FbnRpdHlUeXBlLmNvbnN0cnVjdCA9IGZ1bmN0aW9uKG5hbWUsIEVQTikge1xuICB2YXIgb2JqID0ge307XG4gIG9iai5uYW1lID0gbmFtZTsgLy8gbm9ybWFsbHkgdGhlIHNhbWUgYXMgaXRzIEVQTnNcbiAgb2JqLnN0YXRlVmFyaWFibGVEZWZpbml0aW9ucyA9IFtdOyAvLyAwIG9yIG1hbnkgc2hhcmVkIHN0YXRlIGRlZmluaXRpb25zXG4gIG9iai5FUE5zID0gW107IC8vIHRoZXJlIHNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3QgMSBlbGVtZW50LCBlbHNlIG5vIHJlYXNvbiB0byBleGlzdFxuICByZXR1cm4gb2JqO1xufTtcblxuRW50aXR5VHlwZS5jcmVhdGVOZXdEZWZpbml0aW9uRm9yID0gZnVuY3Rpb24gKG1haW5PYmosIHN0YXRlVmFyKSB7XG4gIHZhciBuZXdEZWZpbml0aW9uID0gU3RhdGVWYXJpYWJsZURlZmluaXRpb24uY29uc3RydWN0KCk7XG4gIG5ld0RlZmluaXRpb24uZW50aXR5VHlwZSA9IG1haW5PYmo7XG4gIG5ld0RlZmluaXRpb24uc3RhdGVWYXJpYWJsZXMucHVzaChzdGF0ZVZhcik7XG5cbiAgc3RhdGVWYXIuc3RhdGVWYXJpYWJsZURlZmluaXRpb24gPSBuZXdEZWZpbml0aW9uO1xuICBzdGF0ZVZhci5wYXJlbnQuZGF0YSgnZW50aXR5VHlwZScsIG1haW5PYmopO1xuICBtYWluT2JqLnN0YXRlVmFyaWFibGVEZWZpbml0aW9ucy5wdXNoKG5ld0RlZmluaXRpb24pO1xufTtcblxuRW50aXR5VHlwZS5hc3NpZ25TdGF0ZVZhcmlhYmxlID0gZnVuY3Rpb24gKG1haW5PYmosIHN0YXRlVmFyKSB7XG4gIC8vIGZpcnN0IHRyaXZpYWwgY2FzZSwgbm8gc3RhdGVEZWZpbml0aW9uIHlldCBmb3IgdGhpcyBlbnRpdHlUeXBlLCBzbyB0aGlzIGlzIGEgbmV3IG9uZVxuICBpZiAobWFpbk9iai5zdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbnMubGVuZ3RoID09IDApIHtcbiAgICBFbnRpdHlUeXBlLmNyZWF0ZU5ld0RlZmluaXRpb25Gb3IobWFpbk9iaiwgc3RhdGVWYXIpO1xuICB9XG4gIGVsc2UgeyAvLyBpZiBkZWZpbml0aW9ucyBhcmUgYWxyZWFkeSBwcmVzZW50LCB3ZSBuZWVkIHRvIG1hdGNoIHRob3NlIHRvIHRoZSBjdXJyZW50IHN0YXRlVmFyaWFibGVcbiAgICBmb3IodmFyIGk9MDsgaSA8IG1haW5PYmouc3RhdGVWYXJpYWJsZURlZmluaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbWF0Y2hTdGF0ZURlZiA9IG1haW5PYmouc3RhdGVWYXJpYWJsZURlZmluaXRpb25zW2ldO1xuICAgICAgaWYgKFN0YXRlVmFyaWFibGVEZWZpbml0aW9uLm1hdGNoU3RhdGVWYXJpYWJsZShtYXRjaFN0YXRlRGVmLCBzdGF0ZVZhcikpe1xuICAgICAgICBtYXRjaFN0YXRlRGVmLnN0YXRlVmFyaWFibGVzLnB1c2goc3RhdGVWYXIpO1xuICAgICAgICBzdGF0ZVZhci5zdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiA9IG1hdGNoU3RhdGVEZWY7XG4gICAgICAgIHN0YXRlVmFyLnBhcmVudC5kYXRhKCdlbnRpdHlUeXBlJywgbWFpbk9iaik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gaWYgbm90aGluZyB3YXMgbWF0Y2hlZCBhbW9uZyB0aGUgY3VycmVudCBzdGF0ZVZhckRlZiBvZiB0aGlzIGVudGl0eVR5cGUsIGNyZWF0ZSBuZXcgb25lXG4gICAgRW50aXR5VHlwZS5jcmVhdGVOZXdEZWZpbml0aW9uRm9yKG1haW5PYmosIHN0YXRlVmFyKTtcbiAgfVxufTtcblxubnMuRW50aXR5VHlwZSA9IEVudGl0eVR5cGU7XG4vLyAtLS0tLS0tLS0tLS0tLSBFTkQgRW50aXR5VHlwZSAtLS0tLS0tLS0tLS0tLSAvL1xuXG4vLyAtLS0tLS0tLS0tLS0tLSBTdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiAtLS0tLS0tLS0tLS0tLSAvL1xuLyoqXG4gKiBUaGUgc3RhdGUgdmFyaWFibGUgZGVmaW5pdGlvbiBpcyBzb21ldGhpbmcgc2hhcmVkIGFjcm9zcyBkaWZmZXJlbnQgRVBOc1xuICogVGhlIGNvbmNlcm5lZCBFUE5zIGFyZSBsaW5rZWQgdGhyb3VnaCB0aGUgZW50aXR5cGUgcmVmZXJlbmNlXG4gKi9cblxudmFyIFN0YXRlVmFyaWFibGVEZWZpbml0aW9uID0ge307XG5cbi8vIENvbnN0cnVjdHMgYSBuZXcgU3RhdGVWYXJpYWJsZURlZmluaXRpb24gb2JqZWN0IGFuZCByZXR1cm5zIGl0XG5TdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbi5jb25zdHJ1Y3QgPSBmdW5jdGlvbihuYW1lLCBlbnRpdHlUeXBlKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgb2JqLm5hbWUgPSBuYW1lO1xuICBvYmouZW50aXR5VHlwZSA9IGVudGl0eVR5cGU7IC8vIHJlZmVyZW5jZSB0byBvd25pbmcgZW50aXR5IHR5cGVcbiAgb2JqLnN0YXRlVmFyaWFibGVzID0gW107IC8vIHRoZXJlIHNob3VsZCBhbHdheXMgYmUgYXQgbGVhc3QgMSBlbGVtZW50LCBlbHNlIG5vIHJlYXNvbiB0byBleGlzdFxuICByZXR1cm4gb2JqO1xufTtcblxuLyoqXG4gKiByZXR1cm5zIGFuIGFycmF5IG9mIGVsZW1lbnRzIHRoYXQgc2hhcmUgdGhpcyBzdGF0ZSBkZWZpbml0aW9uXG4gKi9cblN0YXRlVmFyaWFibGVEZWZpbml0aW9uLmdldENvbmNlcm5lZEVQTnMgPSBmdW5jdGlvbihtYWluT2JqKSB7XG4gIHJldHVybiBtYWluT2JqLmVudGl0eVR5cGUuRVBOcztcbn07XG5cbi8qKlxuICogR3Vlc3MgaWYgdGhlIHByb3ZpZGVkIHN0YXRlVmFyaWFibGUgYmVsb25ncyB0byB0aGlzIHN0YXRlVmFyRGVmaW5pdGlvblxuICogV2UgY29uc2lkZXIgaXQgZG9lcywgaWYgZWl0aGVyIHRoZSBzdGF0ZXZhci52YWx1ZSBvciBzdGF0ZXZhci52YXJpYWJsZSBhcmUgbWF0Y2hpbmcgb25lXG4gKiBpZiB0aGUgc3RhdGV2YXIgaW4gdGhlIHNldCBvZiB0aGUgU3RhdGVWYXJEZWZcbiAqIFRoaXMgaXMgYmVjYXVzZSB3ZSBub3JtYWxseSBjb21wYXJlIG9ubHkgc3RhdGVWYXJpYWJsZXMgZnJvbSB0aGUgc2FtZSBlbnRpdHlUeXBlXG4gKi9cblN0YXRlVmFyaWFibGVEZWZpbml0aW9uLm1hdGNoU3RhdGVWYXJpYWJsZSA9IGZ1bmN0aW9uKG1haW5PYmosIHN0YXRlVmFyKSB7XG4gIGZvcih2YXIgaT0wOyBpIDwgbWFpbk9iai5zdGF0ZVZhcmlhYmxlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtYXRjaFN0YXRlVmFyID0gbWFpbk9iai5zdGF0ZVZhcmlhYmxlc1tpXTtcbiAgICAvLyBEb24ndCBtYXRjaCBhIHN0YXRlVmFyIGFnYWluc3QgYW5vdGhlciBvbmUgZnJvbSB0aGUgc2FtZSBlbGVtZW50LlxuICAgIC8vIElmIDIgc3RhdGV2YXIgb24gdGhlIHNhbWUgZWxlbWVudCwgdGhlbiB0aGV5IGhhdmUgdG8gYmVsb25nIHRvIDIgZGlmZmVyZW50IHN0YXRlVmFyRGVmaW5pdGlvbnNcbiAgICBpZihtYXRjaFN0YXRlVmFyLnBhcmVudCA9PT0gc3RhdGVWYXIucGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyhcInRyeVwiLCBbbWF0Y2hTdGF0ZVZhci52YWx1ZSwgbWF0Y2hTdGF0ZVZhci52YXJpYWJsZV0sIFtzdGF0ZVZhci52YWx1ZSwgc3RhdGVWYXIudmFyaWFibGVdKTtcbiAgICAvLyBub3JtYWwgc3VyZSBjYXNlLiBFeGFtcGxlOlxuICAgIC8vIFAgVDEzNCAtIHVuZGVmaW5lZCBUMTM0XG4gICAgLy8gUCB1bmRlZiAtIFAgdW5kZWZcbiAgICBpZiAoLy8obWF0Y2hTdGF0ZVZhci52YWx1ZSAmJiBzdGF0ZVZhci52YWx1ZSAmJiBtYXRjaFN0YXRlVmFyLnZhbHVlID09IHN0YXRlVmFyLnZhbHVlICkgfHxcbiAgICAgICAgKG1hdGNoU3RhdGVWYXIudmFyaWFibGUgJiYgc3RhdGVWYXIudmFyaWFibGUgJiYgbWF0Y2hTdGF0ZVZhci52YXJpYWJsZSA9PSBzdGF0ZVZhci52YXJpYWJsZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBtb3JlIHN1YnRsZSBjYXNlLCB3aXRoIGVtcHR5IHN0YXRlVmFyLiBMb29rIG9ubHkgYXQgdmFsdWUgYW5kIGRpc2NhcmQgdmFyaWFibGVcbiAgICAvLyBleGFtcGxlOiB1bmRlZiB1bmRlZiAtIFAgdW5kZWZcbiAgICBlbHNlIGlmICgoIW1hdGNoU3RhdGVWYXIudmFyaWFibGUgJiYgIXN0YXRlVmFyLnZhcmlhYmxlKSAmJiAobWF0Y2hTdGF0ZVZhci52YWx1ZSB8fCBzdGF0ZVZhci52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5ucy5TdGF0ZVZhcmlhYmxlRGVmaW5pdGlvbiA9IFN0YXRlVmFyaWFibGVEZWZpbml0aW9uO1xuLy8gLS0tLS0tLS0tLS0tLS0gRU5EIFN0YXRlVmFyaWFibGVEZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tIC8vXG5cbi8vIC0tLS0tLS0tLS0tLS0tIEF1eFVuaXRMYXlvdXQgLS0tLS0tLS0tLS0tLS0gLy9cbi8qKlxuICogUmVzcG9uc2libGUgZm9yIGxheWluZyBvdXQgdGhlIGF1eGlsaWFyeSB1bml0cyBjb250YWluZWQgb24gYSBzYW1lIGVkZ2VcbiAqL1xuXG52YXIgQXV4VW5pdExheW91dCA9IHt9O1xuXG5BdXhVbml0TGF5b3V0LmNvbnN0cnVjdCA9IGZ1bmN0aW9uKHBhcmVudE5vZGUsIGxvY2F0aW9uLCBhbGlnbm1lbnQpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBvYmoudW5pdHMgPSBbXTtcbiAgb2JqLmxvY2F0aW9uID0gbG9jYXRpb247XG4gIG9iai5hbGlnbm1lbnQgPSBhbGlnbm1lbnQgfHwgXCJsZWZ0XCI7IC8vIHRoaXMgd2FzIGludGVuZGVkIHRvIGJlIHVzZWQsIGJ1dCBpdCBpc24ndCBmb3Igbm93XG4gIEF1eFVuaXRMYXlvdXQuc2V0UGFyZW50Tm9kZVJlZihvYmosIHBhcmVudE5vZGUpO1xuXG4gIG9iai5yZW5kZXJMZW5ndGhDYWNoZSA9IFtdO1xuICBvYmoubGVuZ3RoVXNlZCA9IDA7XG5cbiAgLy8gc3BlY2lmaWMgcnVsZXMgZm9yIHRoZSBsYXlvdXRcbiAgaWYocGFyZW50Tm9kZS5kYXRhKCdjbGFzcycpID09IFwic2ltcGxlIGNoZW1pY2FsXCIpIHtcbiAgICBvYmoub3V0ZXJNYXJnaW4gPSAzO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbkF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZSA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIC8vY29uc29sZS5sb2cobWFpbk9iaik7XG4gIHZhciBwYXJlbnROb2RlID0gbWFpbk9iai5wYXJlbnROb2RlO1xuXG4gIC8vIElmIHBhcmVudE5vZGUgaXMgaWQgb2YgcGFyZW50IG5vZGUgcmF0aGVyIHRoYW4gYmVpbmcgaXRzZWxmIGdldCB0aGUgcGFyZW50IG5vZGUgYnkgdGhhdCBpZFxuICBpZiAodHlwZW9mIHBhcmVudE5vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGN5LmdldEVsZW1lbnRCeUlkKHBhcmVudE5vZGUpXG4gIH1cblxuICByZXR1cm4gcGFyZW50Tm9kZTtcbn07XG5cbkF1eFVuaXRMYXlvdXQuc2V0UGFyZW50Tm9kZVJlZiA9IGZ1bmN0aW9uKG1haW5PYmosIHBhcmVudE5vZGUpIHtcbiAgaWYgKG1haW5PYmogJiYgcGFyZW50Tm9kZSkge1xuICAgIC8vIEtlZXAgaWQgb2YgcGFyZW50IG5vZGUgdG8gYXZhb2lkIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICBtYWluT2JqLnBhcmVudE5vZGUgPSB0eXBlb2YgcGFyZW50Tm9kZSA9PT0gJ3N0cmluZycgPyBwYXJlbnROb2RlIDogcGFyZW50Tm9kZS5pZCgpO1xuICB9XG59XG5cbi8qKlxuICogb3V0ZXJNYXJnaW46IHRoZSBsZWZ0IGFuZCByaWdodCBzcGFjZSBsZWZ0IGJldHdlZW4gdGhlIHNpZGUgb2YgdGhlIG5vZGUsIGFuZCB0aGUgZmlyc3QgKGFuZCBsYXN0KSBib3hcbiAqIHVuaXRHYXA6IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBhdXhpbGlhcnkgdW5pdHNcbiAqIGFsd2F5c1Nob3dBdXhVbml0czogYnlwYXNzZXMgYW55IGxpbWl0IG9mIHVuaXRzIGRpc3BsYXllZCwgYW5kIHByZXZlbnQgdW5pdHMgZnJvbSBkaXNhcHBlYXJpbmcsXG4gKiBmb3JjaW5nIGEgbWluaW11bSBzaXplIGZvciB0aGUgbm9kZVxuICogbWF4VW5pdERpc3BsYXllZDogc2hvdyBhdCBtb3N0IHRoaXMgYW1vdW50IG9mIHVuaXRzLCBldmVuIHdoZW4gdGhlcmUgaXMgZW5vdWdoIHNwYWNlXG4gKlxuICogVGhlc2Ugb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBhdCB0aGUgaW5zdGFuY2UgbGV2ZWwuIElmIGl0IGlzIGZvdW5kIGluIGFuIGluc3RhbmNlLCB0aGVuIGl0XG4gKiB0YWtlcyBwcmVjZWRlbmNlLiBJZiBub3QgZm91bmQsIHRoZSBmb2xsb3dpbmcgY2xhc3MnIHZhbHVlcyBhcmUgdXNlZC5cbiAqL1xuQXV4VW5pdExheW91dC5vdXRlck1hcmdpbiA9IDU7XG5BdXhVbml0TGF5b3V0LnVuaXRHYXAgPSA1O1xuQXV4VW5pdExheW91dC5jdXJyZW50VG9wVW5pdEdhcCA9IDU7XG5BdXhVbml0TGF5b3V0LmN1cnJlbnRCb3R0b21Vbml0R2FwID0gNTtcbkF1eFVuaXRMYXlvdXQuY3VycmVudExlZnRVbml0R2FwID0gNTtcbkF1eFVuaXRMYXlvdXQuY3VycmVudFJpZ2h0VW5pdEdhcCA9IDU7XG5BdXhVbml0TGF5b3V0LmFsd2F5c1Nob3dBdXhVbml0cyA9IHRydWU7XG5BdXhVbml0TGF5b3V0Lm1heFVuaXREaXNwbGF5ZWQgPSAtMTtcbkF1eFVuaXRMYXlvdXQubGFzdFBvcyA9IC0xO1xuXG5BdXhVbml0TGF5b3V0LnVwZGF0ZSA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIC8vQXV4VW5pdExheW91dC5wcmVjb21wdXRlQ29vcmRzKG1haW5PYmosIGN5KTtcbn07XG5cbkF1eFVuaXRMYXlvdXQuYWRkQXV4VW5pdCA9IGZ1bmN0aW9uKG1haW5PYmosIGN5LCB1bml0LCBwb3NpdGlvbiwgcHJlQ29tcHV0ZWQpIHtcbiAgaWYodHlwZW9mIHBvc2l0aW9uICE9IFwidW5kZWZpbmVkXCIpIHtcbiAgICAvL2NvbnNvbGUubG9nKFwiYWRkIHVuaXQgYXQgcG9zaXRpaW9uXCIsIHBvc2l0aW9uKTtcbiAgICBtYWluT2JqLnVuaXRzLnNwbGljZShwb3NpdGlvbiwgMCwgdW5pdCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgbWFpbk9iai51bml0cy5wdXNoKHVuaXQpO1xuICAgIHBvc2l0aW9uID0gbWFpbk9iai51bml0cy5sZW5ndGggLSAxO1xuICB9XG4gIGlmIChwcmVDb21wdXRlZCA9PT0gdW5kZWZpbmVkIHx8IHByZUNvbXB1dGVkID09PSBmYWxzZSkge1xuICAgIEF1eFVuaXRMYXlvdXQuY29tcHV0ZUNvb3JkcyhtYWluT2JqLCBjeSwgdW5pdCk7XG4gICAgdmFyIHBhcmVudE5vZGUgPSBBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpO1xuICAgIHZhciBsb2NhdGlvbnMgPSBBdXhVbml0TGF5b3V0LmNoZWNrRml0KHBhcmVudE5vZGUsY3kpO1xuICAgIGlmKGxvY2F0aW9ucy5maWx0ZXIoZnVuY3Rpb24obG9jKXtyZXR1cm4gbG9jID09IG1haW5PYmoubG9jYXRpb259KS5sZW5ndGggPiAwKXtcbiAgICAgIEF1eFVuaXRMYXlvdXQuZml0VW5pdHMocGFyZW50Tm9kZSxjeSwgW21haW5PYmoubG9jYXRpb25dKTtcbiAgICB9XG4gICAgXG4gICAgXG4gIH1cbiAgLy9BdXhVbml0TGF5b3V0LnVwZGF0ZUxlbmd0aENhY2hlKG1haW5PYmosIGN5KTtcbiAgLy9BdXhVbml0TGF5b3V0LnVwZGF0ZShtYWluT2JqLCBjeSwgdHJ1ZSk7XG4gIC8qaWYgKEF1eFVuaXRMYXlvdXQuZ2V0QWx3YXlzU2hvd0F1eFVuaXRzKG1haW5PYmopKSB7XG4gICAgLy8gc2V0IGEgbWluaW11bSBzaXplIGFjY29yZGluZyB0byBib3RoIHNpZGVzIG9uIHRoZSBzYW1lIG9yaWVudGF0aW9uXG4gICAgQXV4VW5pdExheW91dC5zZXRQYXJlbnRNaW5MZW5ndGgobWFpbk9iaiwgY3kpO1xuICAgIC8vIG5lZWQgdG8gcmVzaXplIHRoZSBwYXJlbnQgaW4gY2FzZSB0aGUgc3BhY2Ugd2FzIHRvbyBzbWFsbFxuICAgIEF1eFVuaXRMYXlvdXQucmVzaXplUGFyZW50KG1haW5PYmosIGN5LCBtYWluT2JqLmxlbmd0aFVzZWQpO1xuICB9Ki9cbiAgLy9jeS5zdHlsZSgpLnVwZGF0ZSgpOyAvLyA8LSB3YXMgaXQgcmVhbGx5IG5lY2Vzc2FyeSA/XG4gIHJldHVybiBwb3NpdGlvbjtcbn07XG5cbkF1eFVuaXRMYXlvdXQuY29tcHV0ZUNvb3JkcyA9IGZ1bmN0aW9uKG1haW5PYmosIGN5LCB1bml0KXtcbiAgQXV4VW5pdExheW91dC5zZXREaXNwbGF5ZWRVbml0cyhtYWluT2JqLCBjeSk7XG4gIHZhciBsb2NhdGlvbiA9IG1haW5PYmoubG9jYXRpb247XG4gIHZhciBub2RlID0gQXV4VW5pdExheW91dC5nZXRQYXJlbnROb2RlKG1haW5PYmosIGN5KTtcbiAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiIHx8IGxvY2F0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgdmFyIHBvc2l0aW9uID0gbm9kZS5wb3NpdGlvbigpO1xuICAgIHZhciBwYXJlbnRXaWR0aCA9IG5vZGUuZGF0YSgnYmJveCcpLnc7XG4gICAgdmFyIHBhZGRpbmcgPSBub2RlLnBhZGRpbmcoKTtcbiAgICB2YXIgcGFyZW50V2lkdGggPSBub2RlLndpZHRoKCk7XG4gICAgdmFyIHBhcmVudEhlaWdodCA9IG5vZGUuaGVpZ2h0KCk7XG4gICAgdmFyIHBhcmVudFgxID0gcG9zaXRpb24ueCAtIHBhcmVudFdpZHRoLzIgLSBwYWRkaW5nO1xuICAgIHZhciBwYXJlbnRYMiA9IHBvc2l0aW9uLnggKyBwYXJlbnRXaWR0aC8yICsgcGFkZGluZztcbiAgICB2YXIgcGFyZW50WTEgPSBwb3NpdGlvbi55IC0gcGFyZW50SGVpZ2h0LzIgLSBwYWRkaW5nO1xuICAgIHZhciBwYXJlbnRZMiA9IHBvc2l0aW9uLnkgKyBwYXJlbnRIZWlnaHQvMiArIHBhZGRpbmc7XG5cbiAgICBpZiAobWFpbk9iai51bml0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIFxuICAgICAgdmFyIHJlbGF0aXZlQ29vcmRzID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9SZWxhdGl2ZUNvb3JkKHVuaXQsIHVuaXQuYmJveC53LzIgKyAocGFyZW50WDEpICsgQXV4VW5pdExheW91dC5nZXRDdXJyZW50R2FwKGxvY2F0aW9uKSwgKHBhcmVudFkxKSArIEF1eFVuaXRMYXlvdXQuZ2V0Q3VycmVudEdhcChsb2NhdGlvbiksIGN5KTtcbiAgICAgIHVuaXQuYmJveC54ID0gcmVsYXRpdmVDb29yZHMueCA7XG4gICAgICB1bml0LmJib3gueSA9IHJlbGF0aXZlQ29vcmRzLnk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIGxhc3RVbml0ID0gbWFpbk9iai51bml0c1ttYWluT2JqLnVuaXRzLmxlbmd0aCAtIDJdOy8vR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCB1bml0XG4gICAgICB2YXIgbGFzdFVuaXRBYnNDb3JkID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkKGxhc3RVbml0LCBsYXN0VW5pdC5iYm94LngsIGxhc3RVbml0LmJib3gueSwgY3kpO1xuICAgICAgdmFyIHJlbGF0aXZlQ29vcmRzID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9SZWxhdGl2ZUNvb3JkKHVuaXQsIHVuaXQuYmJveC53LzIrIGxhc3RVbml0QWJzQ29yZC54ICsgbGFzdFVuaXQuYmJveC53LzIgKyBBdXhVbml0TGF5b3V0LmdldEN1cnJlbnRHYXAobG9jYXRpb24pLCAocGFyZW50WTEpICsgQXV4VW5pdExheW91dC5nZXRDdXJyZW50R2FwKGxvY2F0aW9uKSwgY3kpO1xuICAgICAgdW5pdC5iYm94LnggPSByZWxhdGl2ZUNvb3Jkcy54IDtcbiAgICAgIHVuaXQuYmJveC55ID0gcmVsYXRpdmVDb29yZHMueTtcbiAgICAgLy8gdW5pdC5iYm94LnggPSBtYWluT2JqLnVuaXRzW2xhc3RVbml0XS5iYm94LnggKyAgbWFpbk9iai51bml0c1tsYXN0VW5pdF0uYmJveC53LzIgKyB1bml0LmJib3gudy8yICsgQXV4VW5pdExheW91dC5nZXRDdXJyZW50R2FwKGxvY2F0aW9uKTtcbiAgICB9XG4gICAgdW5pdC5iYm94LnkgPSAobG9jYXRpb24gPT09IFwidG9wXCIpID8gMCA6IDEwMDtcbiAgfS8vV2UgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgb3IgbGVmdCBhZGRpdGlvbiBjYXNlcyB5ZXRcbn07XG5cbkF1eFVuaXRMYXlvdXQucmVtb3ZlQXV4VW5pdCA9IGZ1bmN0aW9uKG1haW5PYmosIGN5LCB1bml0KSB7XG4gIHZhciBpbmRleCA9IG1haW5PYmoudW5pdHMuaW5kZXhPZih1bml0KTtcbiAgbWFpbk9iai51bml0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAvL0F1eFVuaXRMYXlvdXQudXBkYXRlTGVuZ3RoQ2FjaGUobWFpbk9iaiwgY3kpO1xuICAvKkF1eFVuaXRMYXlvdXQudXBkYXRlKG1haW5PYmosIGN5LCB0cnVlKTtcbiAgaWYgKEF1eFVuaXRMYXlvdXQuZ2V0QWx3YXlzU2hvd0F1eFVuaXRzKG1haW5PYmopKSB7XG4gICAgLy8gc2V0IGEgbWluaW11bSBzaXplIGFjY29yZGluZyB0byBib3RoIHNpZGVzIG9uIHRoZSBzYW1lIG9yaWVudGF0aW9uXG4gICAgQXV4VW5pdExheW91dC5zZXRQYXJlbnRNaW5MZW5ndGgobWFpbk9iaiwgY3kpO1xuICB9Ki9cbiAgdmFyIHBhcmVudE5vZGUgPSBBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpO1xuXG4gIC8vVE9ETyBmaW5kIGEgd2F5IHRvIGVsaW1hdGUgdGhpcyByZWR1bmRhbmN5IHRvIHVwZGF0ZSBpbmZvLWJveCBwb3NpdGlvbnNcbiAgcGFyZW50Tm9kZS5kYXRhKCdib3JkZXItd2lkdGgnLCBwYXJlbnROb2RlLmRhdGEoJ2JvcmRlci13aWR0aCcpKTtcbn07XG5cbi8qKlxuICogcmVvcmRlciBib3hlcyB1c2luZyB0aGVpciBkZWZpbmVkIHBvc2l0aW9ucy4gRnJvbSBsZWZ0IHRvIHJpZ2h0IGFuZCB0b3AgdG8gYm90dG9tLlxuICogdGhpcyBlbnN1cmVzIHRoYXQgdGhlaXIgb3JkZXIgaW4gdGhlIGxheW91dCdzIGxpc3QgY29ycmVzcG9uZHMgdG8gdGhlIHJlYWxpdHkgb2YgdGhlIG1hcC5cbiAqL1xuQXV4VW5pdExheW91dC5yZW9yZGVyRnJvbVBvc2l0aW9ucyA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIG1haW5PYmoudW5pdHMuc29ydChmdW5jdGlvbihhLCBiKSB7XG4gICAgaWYobWFpbk9iai5sb2NhdGlvbiA9PSBcInRvcFwiIHx8IG1haW5PYmoubG9jYXRpb24gPT0gXCJib3R0b21cIikge1xuICAgICAgaWYgKGEuYmJveC54IDwgYi5iYm94LngpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKGEuYmJveC54ID4gYi5iYm94LngpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGEuYmJveC55IDwgYi5iYm94LnkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKGEuYmJveC55ID4gYi5iYm94LnkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9KTtcbiAgLy9jb25zb2xlLmxvZyhcInVuaXRzIGFmdGVyIHJlb2FyZGVyXCIsIHRoaXMudW5pdHMpO1xuICAvKkF1eFVuaXRMYXlvdXQudXBkYXRlTGVuZ3RoQ2FjaGUobWFpbk9iaiwgY3kpO1xuICBBdXhVbml0TGF5b3V0LnVwZGF0ZShtYWluT2JqLCBjeSwgdHJ1ZSk7Ki9cbn07XG5cbi8qKlxuICogdXNlIGEgY2FjaGVkIGxpc3QgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgdGhlIGxlbmd0aCBuZWVkZWQgdG8gZHJhdyB4IGF1eCB1bml0cy5cbiAqIGNhbiB0aGVuIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhlIHBhcmVudCBub2RlJ3MgZGltZW5zaW9ucywgdG8gZGVjaWRlIGhvdyBtYW55XG4gKiBhdXggdW5pdHMgdG8gZHJhdy5cbiAqL1xuQXV4VW5pdExheW91dC51cGRhdGVMZW5ndGhDYWNoZSA9IGZ1bmN0aW9uKG1haW5PYmosIGN5KSB7XG4gIG1haW5PYmoucmVuZGVyTGVuZ3RoQ2FjaGUgPSBbMF07XG4gIHZhciBwcmV2aW91cyA9IEF1eFVuaXRMYXlvdXQuZ2V0T3V0ZXJNYXJnaW4obWFpbk9iaik7XG4gIGZvcih2YXIgaT0wOyBpIDwgbWFpbk9iai51bml0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBjdXJyZW50TGVuZ3RoO1xuICAgIGlmKEF1eFVuaXRMYXlvdXQuaXNUb3JCKG1haW5PYmopKSB7XG4gICAgICBjdXJyZW50TGVuZ3RoID0gbWFpbk9iai51bml0c1tpXS5iYm94Lnc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY3VycmVudExlbmd0aCA9IG1haW5PYmoudW5pdHNbaV0uYmJveC5oO1xuICAgIH1cbiAgICBtYWluT2JqLnJlbmRlckxlbmd0aENhY2hlLnB1c2gocHJldmlvdXMgKyBjdXJyZW50TGVuZ3RoICsgQXV4VW5pdExheW91dC5nZXRPdXRlck1hcmdpbihtYWluT2JqKSk7XG4gICAgcHJldmlvdXMgKz0gY3VycmVudExlbmd0aCArIEF1eFVuaXRMYXlvdXQuZ2V0VW5pdEdhcChtYWluT2JqKTtcbiAgfVxufTtcblxuLyoqXG4gKiBVc2UgdGhlIGNhY2hlZCBwcmVjb21wdXRlZCBsZW5ndGhzIHRvIGRlY2lkZSBob3cgbWFueSB1bml0cyB3ZSBhcmUgY2FwYWJsZSBvZiBkcmF3aW5nLFxuICogY29uc2lkZXJpbmcgdGhlIHNpemUgb2YgdGhlIHBhcmVudCBub2RlLlxuICogVGhlIG51bWJlciByZXR1cm5lZCBzYXlzOiB3ZSBhcmUgYWJsZSB0byBkcmF3IHRoZSBOIGZpcnN0IHVuaXRzIG9mIHRoZSBsaXN0cy5cbiAqIFVudXNlZCBmb3Igbm93LlxuICovXG5BdXhVbml0TGF5b3V0LmdldERyYXdhYmxlVW5pdEFtb3VudCA9IGZ1bmN0aW9uKG1haW5PYmopIHtcbiAgaWYoQXV4VW5pdExheW91dC5nZXRBbHdheXNTaG93QXV4VW5pdHMobWFpbk9iaikpIHtcbiAgICAvLyBieXBhc3MgYWxsIHRoaXNcbiAgICByZXR1cm4gbWFpbk9iai51bml0cy5sZW5ndGg7XG4gIH1cblxuICAvLyBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgc2lkZSBvbiB3aGljaCB3ZSBkcmF3XG4gIHZhciBhdmFpbGFibGVTcGFjZTtcbiAgaWYgKEF1eFVuaXRMYXlvdXQuaXNUb3JCKG1haW5PYmopKSB7XG4gICAgYXZhaWxhYmxlU3BhY2UgPSBBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpLm91dGVyV2lkdGgoKTtcbiAgfVxuICBlbHNlIHtcbiAgICBhdmFpbGFibGVTcGFjZSA9IEF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZShtYWluT2JqLCBjeSkub3V0ZXJIZWlnaHQoKTtcbiAgfVxuICAvLyBsb29wIG92ZXIgdGhlIGNhY2hlZCBwcmVjb21wdXRlZCBsZW5ndGhzXG4gIGZvcih2YXIgaT0wOyBpIDwgbWFpbk9iai5yZW5kZXJMZW5ndGhDYWNoZS5sZW5ndGg7IGkrKykge1xuICAgIGlmKG1haW5PYmoucmVuZGVyTGVuZ3RoQ2FjaGVbaV0gPiBhdmFpbGFibGVTcGFjZSkge1xuICAgICAgLy8gc3RvcCBpZiB3ZSBvdmVyZmxvd1xuICAgICAgcmV0dXJuIGkgLSAxO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWFpbk9iai51bml0cy5sZW5ndGg7XG59O1xuXG5BdXhVbml0TGF5b3V0LnNldERpc3BsYXllZFVuaXRzID0gZnVuY3Rpb24gKG1haW5PYmosIGN5KSB7XG4gIC8vIGdldCB0aGUgbGVuZ3RoIG9mIHRoZSBzaWRlIG9uIHdoaWNoIHdlIGRyYXdcblxuICB2YXIgYXZhaWxhYmxlU3BhY2U7XG4gIGlmIChBdXhVbml0TGF5b3V0LmlzVG9yQihtYWluT2JqKSkge1xuICAgIGF2YWlsYWJsZVNwYWNlID0gQXV4VW5pdExheW91dC5nZXRQYXJlbnROb2RlKG1haW5PYmosIGN5KS5vdXRlcldpZHRoKCk7XG4gICAgLy8gZHVlIHRvIGNvcm5lciBvZiBiYXJyZWwgc2hhcGVkIGNvbXBhcnRtZW50IGRlY3JlYXNlIGF2YWlsYWJsZVNwYWNlIC0tIG5vIGluZm9ib3ggb24gY29ybmVyc1xuICAgIGlmIChBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpLmRhdGEoXCJjbGFzc1wiKSA9PSBcImNvbXBhcnRtZW50XCIpXG4gICAgICAgIGF2YWlsYWJsZVNwYWNlICo9IDAuODtcbiAgfVxuICBlbHNlIHtcbiAgICBhdmFpbGFibGVTcGFjZSA9IEF1eFVuaXRMYXlvdXQuZ2V0UGFyZW50Tm9kZShtYWluT2JqLCBjeSkub3V0ZXJIZWlnaHQoKTtcbiAgfVxuXG4gIC8vIHRoZXJlIGlzIGFsd2F5cyBuKzEgZWxlbWVudHMgaW4gdGhlIGNhY2hlZExlbmd0aCBmb3IgbiB1bml0c1xuICB2YXIgYWx3YXlzU2hvd0F1eFVuaXRzID0gQXV4VW5pdExheW91dC5nZXRBbHdheXNTaG93QXV4VW5pdHMobWFpbk9iaik7XG4gIHZhciBtYXhVbml0RGlzcGxheWVkID0gQXV4VW5pdExheW91dC5nZXRNYXhVbml0RGlzcGxheWVkKG1haW5PYmopO1xuICBmb3IodmFyIGk9MDsgaSA8IG1haW5PYmoudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZigobWFpbk9iai5yZW5kZXJMZW5ndGhDYWNoZVtpKzFdIDw9IGF2YWlsYWJsZVNwYWNlIC8vIGRvIHdlIGhhdmUgZW5vdWdoIHNwYWNlP1xuICAgICAgJiYgKG1heFVuaXREaXNwbGF5ZWQgPT0gLTEgfHwgaSA8IG1heFVuaXREaXNwbGF5ZWQpKSAvLyBpcyB0aGVyZSBubyBsaW1pdD8gb3IgYXJlIHdlIHVuZGVyIHRoYXQgbGltaXQ/XG4gICAgICB8fCBhbHdheXNTaG93QXV4VW5pdHMpIHsgLy8gZG8gd2UgYWx3YXlzIHdhbnQgdG8gc2hvdyBldmVyeXRoaW5nIHJlZ2FyZGxlc3M/XG4gICAgICBtYWluT2JqLnVuaXRzW2ldLmlzRGlzcGxheWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBtYWluT2JqLnVuaXRzW2ldLmlzRGlzcGxheWVkID0gZmFsc2U7XG4gICAgfVxuICB9XG59O1xuXG5cbkF1eFVuaXRMYXlvdXQuZ2V0VXNlZFdpZHRoID0gZnVuY3Rpb24obm9kZSwgdGIpe1xuICB2YXIgdW5pdHMgPSB0Yi51bml0cztcbiAgdmFyIHRvdGFsV2lkdGggPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdG90YWxXaWR0aCArPSB1bml0c1tpXS5iYm94Lnc7XG4gIH1cbiAgcmV0dXJuIHRvdGFsV2lkdGg7XG59XG5cbkF1eFVuaXRMYXlvdXQuZ2V0VXNlZEhlaWdodCA9IGZ1bmN0aW9uKG5vZGUsIHRiKXtcbiAgdmFyIHVuaXRzID0gdGIudW5pdHM7XG4gIHZhciB0b3RhbEhlaWdodCA9IDA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICB0b3RhbEhlaWdodCArPSB1bml0c1tpXS5iYm94Lmg7XG4gIH1cbiAgcmV0dXJuIHRvdGFsSGVpZ2h0O1xufVxuXG5BdXhVbml0TGF5b3V0LmdldFVzZWRMZW5ndGhUQiA9IGZ1bmN0aW9uKG5vZGUsIHRiKXtcbiAgdmFyIHVuaXRzID0gdGIudW5pdHM7XG4gIHJldHVybiBBdXhVbml0TGF5b3V0LmdldFVzZWRXaWR0aChub2RlLCB0YikgKyAodW5pdHMubGVuZ3RoICsgIDEpICogQXV4VW5pdExheW91dC51bml0R2FwOyAvL09uZSBnYXAgZm9yIGxlZnRtb3N0IG91dGVyIG1hcmdpblxufVxuXG5BdXhVbml0TGF5b3V0LmdldFVzZWRMZW5ndGhMUiA9IGZ1bmN0aW9uKG5vZGUsIHRiKXtcbiAgdmFyIHVuaXRzID0gdGIudW5pdHM7XG4gIHJldHVybiBBdXhVbml0TGF5b3V0LmdldFVzZWRIZWlnaHQobm9kZSwgdGIpICsgKHVuaXRzLmxlbmd0aCArICAxKSAqIEF1eFVuaXRMYXlvdXQudW5pdEdhcDsgLy9PbmUgZ2FwIGZvciBsZWZ0bW9zdCBvdXRlciBtYXJnaW5cbn1cblxuQXV4VW5pdExheW91dC5zZXRDdXJyZW50R2FwID0gZnVuY3Rpb24gKGxvY2F0aW9uLCB2YWx1ZSl7XG4gIGlmIChsb2NhdGlvbiA9PT0gXCJ0b3BcIikge1xuICAgIEF1eFVuaXRMYXlvdXQuY3VycmVudFRvcFVuaXRHYXAgPSB2YWx1ZTtcbiAgfVxuICBlbHNlIGlmIChsb2NhdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgIEF1eFVuaXRMYXlvdXQuY3VycmVudEJvdHRvbVVuaXRHYXAgPSB2YWx1ZTtcbiAgfVxuICBlbHNlIGlmIChsb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgQXV4VW5pdExheW91dC5jdXJyZW50UmlnaHRVbml0R2FwID0gdmFsdWU7XG4gIH1cbiAgZWxzZSB7XG4gICAgQXV4VW5pdExheW91dC5jdXJyZW50TGVmdFVuaXRHYXAgPSB2YWx1ZTtcbiAgfVxufTtcblxuQXV4VW5pdExheW91dC5nZXRDdXJyZW50R2FwID0gZnVuY3Rpb24gKGxvY2F0aW9uKXtcbiAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiKSB7XG4gICAgcmV0dXJuIEF1eFVuaXRMYXlvdXQuY3VycmVudFRvcFVuaXRHYXA7XG4gIH1cbiAgZWxzZSBpZiAobG9jYXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICByZXR1cm4gQXV4VW5pdExheW91dC5jdXJyZW50Qm90dG9tVW5pdEdhcDtcbiAgfVxuICBlbHNlIGlmIChsb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgcmV0dXJuIEF1eFVuaXRMYXlvdXQuY3VycmVudFJpZ2h0VW5pdEdhcDtcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gQXV4VW5pdExheW91dC5jdXJyZW50TGVmdFVuaXRHYXA7XG4gIH1cbn07XG5cbkF1eFVuaXRMYXlvdXQuY2hlY2tGaXQgPSBmdW5jdGlvbiAobm9kZSwgY3ksIGZvcmNlQ2hlY2spe1xuICB2YXIgZml0TG9jYXRpb25zID0gW107XG4gIGZvcih2YXIgbG9jYXRpb24gaW4gbm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpKSB7XG4gICAgaWYgKGZvcmNlQ2hlY2sgIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbiAhPT0gZm9yY2VDaGVjaykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChBdXhVbml0TGF5b3V0LmdldEN1cnJlbnRHYXAobG9jYXRpb24pIDwgQXV4VW5pdExheW91dC51bml0R2FwKSB7XG4gICAgICBmaXRMb2NhdGlvbnMucHVzaChsb2NhdGlvbik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIHVuaXQgPSBub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbG9jYXRpb25dO1xuICAgIHZhciB1bml0cyA9IHVuaXQudW5pdHM7XG4gICAgaWYgKHVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBmaXJzdFVuaXQgPSB1bml0c1swXTtcbiAgICB2YXIgbGFzdFVuaXQgPSB1bml0c1t1bml0cy5sZW5ndGgtMV07XG4gICAgdmFyIGNvb3Jkc0ZpcnN0ID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkKGZpcnN0VW5pdCwgZmlyc3RVbml0LmJib3gueCwgZmlyc3RVbml0LmJib3gueSwgY3kpO1xuICAgIHZhciBjb29yZHNMYXN0ID0gQXV4aWxpYXJ5VW5pdC5jb252ZXJ0VG9BYnNvbHV0ZUNvb3JkKGxhc3RVbml0LCBsYXN0VW5pdC5iYm94LngsIGxhc3RVbml0LmJib3gueSwgY3kpO1xuICAgIHZhciBnYXAgPSBBdXhVbml0TGF5b3V0LmdldEN1cnJlbnRHYXAobG9jYXRpb24pO1xuICAgIHZhciBwYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gICAgaWYgKHVuaXRzLmxlbmd0aCA+IDApIHsgLy9Gb3IgYW55IGNhc2Ugb2YgcmVtb3ZhbFxuICAgICAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiIHx8IGxvY2F0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIHZhciBwYXJlbnRYMSA9IG5vZGUucG9zaXRpb24oKS54IC0gbm9kZS53aWR0aCgpLzIgLSBwYWRkaW5nO1xuICAgICAgICB2YXIgcGFyZW50WDIgPSBub2RlLnBvc2l0aW9uKCkueCArIG5vZGUud2lkdGgoKS8yICsgcGFkZGluZztcbiAgICAgICAgdmFyIGZpcnN0WDEgPSBjb29yZHNGaXJzdC54IC0gZmlyc3RVbml0LmJib3gudy8yO1xuICAgICAgICB2YXIgbGFzdFgyID0gY29vcmRzTGFzdC54ICsgbGFzdFVuaXQuYmJveC53LzI7XG5cbiAgICAgICAgaWYocGFyZW50WDIgPCBsYXN0WDIgKyBnYXApe1xuICAgICAgICAgIGZpdExvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIC8qIGlmIChwYXJlbnRYMSArIGdhcCA+IGZpcnN0WDEgfHwgcGFyZW50WDIgLSBnYXAgPCBsYXN0WDIpIHtcbiAgICAgICAgICAgIGZpdExvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgfSAqL1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBwYXJlbnRZMSA9IG5vZGUucG9zaXRpb24oKS55IC0gbm9kZS5oZWlnaHQoKS8yIC0gcGFkZGluZztcbiAgICAgICAgdmFyIHBhcmVudFkyID0gbm9kZS5wb3NpdGlvbigpLnkgKyBub2RlLmhlaWdodCgpLzIgKyBwYWRkaW5nO1xuICAgICAgICB2YXIgZmlyc3RZMSA9IGNvb3Jkc0ZpcnN0LnkgLSBmaXJzdFVuaXQuYmJveC5oLzI7XG4gICAgICAgIHZhciBsYXN0WTIgPSBjb29yZHNMYXN0LnkgKyBsYXN0VW5pdC5iYm94LmgvMjtcbiAgICAgICAgaWYocGFyZW50WTIgPCBsYXN0WTIgKyBnYXApe1xuICAgICAgICAgIGZpdExvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIC8qIGlmIChwYXJlbnRZMSArIGdhcCA+IGZpcnN0WTEgfHwgcGFyZW50WTIgLSBnYXAgPCBsYXN0WTIpIHtcbiAgICAgICAgICAgIGZpdExvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTtcbiAgICAgICAgfSAqL1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZml0TG9jYXRpb25zO1xufTtcblxuQXV4VW5pdExheW91dC5zZXRJZGVhbEdhcCA9IGZ1bmN0aW9uKG5vZGUsIGxvY2F0aW9uKXtcblxuICB2YXIgcGFyZW50V2lkdGggPSBub2RlLndpZHRoKCk7XG4gIHZhciBwYXJlbnRIZWlnaHQgPSBub2RlLmhlaWdodCgpO1xuICB2YXIgcGFkZGluZyA9IG5vZGUucGFkZGluZygpO1xuICB2YXIgcG9zaXRpb24gPSBub2RlLnBvc2l0aW9uKCk7XG4gIHZhciBwYXJlbnRYMSA9IHBvc2l0aW9uLnggLSBwYXJlbnRXaWR0aC8yIC0gcGFkZGluZztcbiAgdmFyIHBhcmVudFkxID0gcG9zaXRpb24ueSAtIHBhcmVudEhlaWdodC8yIC0gcGFkZGluZztcbiAgdmFyIGVzdGltYXRlZEdhcDtcbiAgIFxuICAgIHZhciBhdXhVbml0ID0gbm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW2xvY2F0aW9uXTtcbiAgICBpZiAoYXV4VW5pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgaWYgKGF1eFVuaXQudW5pdHMubGVuZ3RoIDw9IDAgfHwgIWF1eFVuaXQudW5pdHMpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICB2YXIgdW5pdHMgPSBhdXhVbml0LnVuaXRzO1xuICAgIFxuICAgIGlmICggbG9jYXRpb24gPT09IFwidG9wXCIgfHwgbG9jYXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgIHVzZWRMZW5ndGggPSBBdXhVbml0TGF5b3V0LmdldFVzZWRMZW5ndGhUQihub2RlLCBhdXhVbml0KTtcbiAgICAgIHZhciB0b3RhbFdpZHRoID0gQXV4VW5pdExheW91dC5nZXRVc2VkV2lkdGgobm9kZSwgYXV4VW5pdCk7XG4gICAgICBlc3RpbWF0ZWRHYXAgPSAocGFyZW50V2lkdGggKyAyKiBwYWRkaW5nIC0gdG90YWxXaWR0aCkgLyAodW5pdHMubGVuZ3RoICsgMSk7XG4gICAgICBpZiAoZXN0aW1hdGVkR2FwID4gQXV4VW5pdExheW91dC51bml0R2FwKSB7XG4gICAgICAgIGVzdGltYXRlZEdhcCA9IEF1eFVuaXRMYXlvdXQudW5pdEdhcDtcbiAgICAgIH1cblxuICAgICAgLy92YXIgZmlyc3RQb3NpdGlvbiA9IEF1eGlsaWFyeVVuaXQuY29udmVydFRvUmVsYXRpdmVDb29yZCh1bml0c1swXSwgdW5pdFswXS5iYm94LncvMiArIChwYXJlbnRYMSkgKyBlc3RpbWF0ZWRHYXAsIChwYXJlbnRZMSkgKyBlc3RpbWF0ZWRHYXAsIHVuZGVmaW5lZCwgbm9kZSk7Ly9Qb3NpdGlvbiBvZiB0aGUgZmlyc3QgdW5pdFxuICAgICAgXG4gICAgICB2YXIgdXNlZExlbmd0aCA9IGVzdGltYXRlZEdhcDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlbGF0aXZlQ29yZCA9IEF1eGlsaWFyeVVuaXQuY29udmVydFRvUmVsYXRpdmVDb29yZCh1bml0c1tpXSwgcGFyZW50WDEgK3VzZWRMZW5ndGggKyB1bml0c1tpXS5iYm94LncvMiwgKHBhcmVudFkxKSAsIHVuZGVmaW5lZCwgbm9kZSk7XG4gICAgICAgIHVuaXRzW2ldLmJib3gueCA9IHJlbGF0aXZlQ29yZC54O1xuICAgICAgICB1bml0c1tpXS5iYm94LnkgPSByZWxhdGl2ZUNvcmQueTtcbiAgICAgICAgdXNlZExlbmd0aCArPSB1bml0c1tpXS5iYm94LncrIGVzdGltYXRlZEdhcDsgICAgICAgXG4gICAgICAgXG4gICAgICB9XG4gICAgICBBdXhVbml0TGF5b3V0LnNldEN1cnJlbnRHYXAobG9jYXRpb24sIGVzdGltYXRlZEdhcCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy9GaW5kIHRvdGFsIGxlZnQgbGVuZ3RoXG4gICAgICB1c2VkTGVuZ3RoID0gQXV4VW5pdExheW91dC5nZXRVc2VkTGVuZ3RoTFIobm9kZSwgYXV4VW5pdCk7XG4gICAgICAvL0NvbXBhcmUgdGhlIHNpZGUgbGVuZ3Roc1xuICAgICAgdmFyIHRvdGFsSGVpZ2h0ID0gQXV4VW5pdExheW91dC5nZXRVc2VkSGVpZ2h0KG5vZGUsIGF1eFVuaXQpO1xuICAgICAgZXN0aW1hdGVkR2FwID0gKHBhcmVudEhlaWdodCArIDIqIHBhZGRpbmcgLSB0b3RhbEhlaWdodCkgLyAodW5pdHMubGVuZ3RoICsgMSk7XG4gICAgICBpZiAoZXN0aW1hdGVkR2FwID4gQXV4VW5pdExheW91dC51bml0R2FwKSB7XG4gICAgICAgIGVzdGltYXRlZEdhcCA9IEF1eFVuaXRMYXlvdXQudW5pdEdhcDtcbiAgICAgIH1cbiAgICAgIC8vRWxzZSBzY2FsZSBieSB1c2luZyBhdmFpbGFibGUgc3BhY2UsIHJlZHVjaW5nIG1hcmdpbnMgYW5kIGdhcHMuXG4gICAgICAvL0NoZWNrIGlmIG5ldyBnYXAgaXMgZW5vdWdoIHRvIGZpdFxuICAgICAgdmFyIHVzZWRMZW5ndGggPSBlc3RpbWF0ZWRHYXA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZWxhdGl2ZUNvcmQgPSBBdXhpbGlhcnlVbml0LmNvbnZlcnRUb1JlbGF0aXZlQ29vcmQodW5pdHNbaV0sIHBhcmVudFgxICwgKHBhcmVudFkxKSArIHVzZWRMZW5ndGggKyB1bml0c1tpXS5iYm94LmgvMiwgdW5kZWZpbmVkLCBub2RlKTtcbiAgICAgICAgdW5pdHNbaV0uYmJveC54ID0gcmVsYXRpdmVDb3JkLng7XG4gICAgICAgIHVuaXRzW2ldLmJib3gueSA9IHJlbGF0aXZlQ29yZC55O1xuICAgICAgICB1c2VkTGVuZ3RoICs9IHVuaXRzW2ldLmJib3guaCsgZXN0aW1hdGVkR2FwO1xuICAgICAgfVxuICAgICAgLy9BdXhVbml0TGF5b3V0LmN1cnJlbnRMZWZ0VW5pdEdhcCA9IGVzdGltYXRlZEdhcDtcbiAgICB9XG4gICAgQXV4VW5pdExheW91dC5zZXRDdXJyZW50R2FwKGxvY2F0aW9uLCBlc3RpbWF0ZWRHYXApO1xuICBcbn1cbkF1eFVuaXRMYXlvdXQuZml0VW5pdHMgPSBmdW5jdGlvbiAobm9kZSwgY3ksIGxvY2F0aW9ucykge1xuXG4gIHZhciBwYXJlbnRXaWR0aCA9IG5vZGUud2lkdGgoKTtcbiAgdmFyIHBhcmVudEhlaWdodCA9IG5vZGUuaGVpZ2h0KCk7XG4gIHZhciBwYWRkaW5nID0gbm9kZS5wYWRkaW5nKCk7XG4gIHZhciBwb3NpdGlvbiA9IG5vZGUucG9zaXRpb24oKTtcbiAgdmFyIHBhcmVudFgxID0gcG9zaXRpb24ueCAtIHBhcmVudFdpZHRoLzIgLSBwYWRkaW5nO1xuICB2YXIgcGFyZW50WDIgPSBwb3NpdGlvbi54ICsgcGFyZW50V2lkdGgvMiArIHBhZGRpbmc7XG4gIHZhciBwYXJlbnRZMSA9IHBvc2l0aW9uLnkgLSBwYXJlbnRIZWlnaHQvMiAtIHBhZGRpbmc7XG4gIHZhciBwYXJlbnRZMiA9IHBvc2l0aW9uLnkgKyBwYXJlbnRIZWlnaHQvMiArIHBhZGRpbmc7XG5cbiAgLy9HZXQgUGFyZW50IG5vZGUgYW5kIGZpbmQgcGFyZW50IHdpZHRoXG4gIFxuICB2YXIgZXN0aW1hdGVkR2FwO1xuXG4gIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBsb2NhdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgdmFyIGxvY2F0aW9uID0gbG9jYXRpb25zW2luZGV4XTtcbiAgICB2YXIgYXV4VW5pdCA9IG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl07XG4gICAgaWYgKGF1eFVuaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhdXhVbml0LnVuaXRzLmxlbmd0aCA8PSAwIHx8ICFhdXhVbml0LnVuaXRzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIHVuaXRzID0gYXV4VW5pdC51bml0cztcbiAgICBcbiAgICBpZiAoIGxvY2F0aW9uID09PSBcInRvcFwiIHx8IGxvY2F0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgICB1c2VkTGVuZ3RoID0gQXV4VW5pdExheW91dC5nZXRVc2VkTGVuZ3RoVEIobm9kZSwgYXV4VW5pdCk7XG4gICAgICB2YXIgdG90YWxXaWR0aCA9IEF1eFVuaXRMYXlvdXQuZ2V0VXNlZFdpZHRoKG5vZGUsIGF1eFVuaXQpO1xuICAgICAgZXN0aW1hdGVkR2FwID0gKHBhcmVudFdpZHRoICsgMipwYWRkaW5nIC0gdG90YWxXaWR0aCkgLyAodW5pdHMubGVuZ3RoICsgMSk7XG4gICAgICBpZiAoZXN0aW1hdGVkR2FwID4gQXV4VW5pdExheW91dC51bml0R2FwKSB7XG4gICAgICAgIGVzdGltYXRlZEdhcCA9IEF1eFVuaXRMYXlvdXQudW5pdEdhcDtcbiAgICAgIH1cblxuICAgICAgLy92YXIgZmlyc3RQb3NpdGlvbiA9IEF1eGlsaWFyeVVuaXQuY29udmVydFRvUmVsYXRpdmVDb29yZCh1bml0c1swXSwgdW5pdFswXS5iYm94LncvMiArIChwYXJlbnRYMSkgKyBlc3RpbWF0ZWRHYXAsIChwYXJlbnRZMSkgKyBlc3RpbWF0ZWRHYXAsIHVuZGVmaW5lZCwgbm9kZSk7Ly9Qb3NpdGlvbiBvZiB0aGUgZmlyc3QgdW5pdFxuICAgICAgXG4gICAgICB2YXIgdXNlZExlbmd0aCA9IGVzdGltYXRlZEdhcDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJlbGF0aXZlQ29yZCA9IEF1eGlsaWFyeVVuaXQuY29udmVydFRvUmVsYXRpdmVDb29yZCh1bml0c1tpXSwgcGFyZW50WDEgK3VzZWRMZW5ndGggKyB1bml0c1tpXS5iYm94LncvMiwgKHBhcmVudFkxKSAsIHVuZGVmaW5lZCwgbm9kZSk7XG4gICAgICAgIHVuaXRzW2ldLmJib3gueCA9IHJlbGF0aXZlQ29yZC54O1xuICAgICAgICB1bml0c1tpXS5iYm94LnkgPSByZWxhdGl2ZUNvcmQueTtcbiAgICAgICAgdXNlZExlbmd0aCArPSB1bml0c1tpXS5iYm94LncrIGVzdGltYXRlZEdhcDsgICAgICAgXG4gICAgICAgXG4gICAgICB9XG4gICAgICBBdXhVbml0TGF5b3V0LnNldEN1cnJlbnRHYXAobG9jYXRpb24sIGVzdGltYXRlZEdhcCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy9GaW5kIHRvdGFsIGxlZnQgbGVuZ3RoXG4gICAgICB1c2VkTGVuZ3RoID0gQXV4VW5pdExheW91dC5nZXRVc2VkTGVuZ3RoTFIobm9kZSwgYXV4VW5pdCk7XG4gICAgICAvL0NvbXBhcmUgdGhlIHNpZGUgbGVuZ3Roc1xuICAgICAgdmFyIHRvdGFsSGVpZ2h0ID0gQXV4VW5pdExheW91dC5nZXRVc2VkSGVpZ2h0KG5vZGUsIGF1eFVuaXQpO1xuICAgICAgZXN0aW1hdGVkR2FwID0gKHBhcmVudEhlaWdodCArIDIqcGFkZGluZyAgLSB0b3RhbEhlaWdodCkgLyAodW5pdHMubGVuZ3RoICsgMSk7XG4gICAgICBpZiAoZXN0aW1hdGVkR2FwID4gQXV4VW5pdExheW91dC51bml0R2FwKSB7XG4gICAgICAgIGVzdGltYXRlZEdhcCA9IEF1eFVuaXRMYXlvdXQudW5pdEdhcDtcbiAgICAgIH1cbiAgICAgIC8vRWxzZSBzY2FsZSBieSB1c2luZyBhdmFpbGFibGUgc3BhY2UsIHJlZHVjaW5nIG1hcmdpbnMgYW5kIGdhcHMuXG4gICAgICAvL0NoZWNrIGlmIG5ldyBnYXAgaXMgZW5vdWdoIHRvIGZpdFxuICAgICAgdmFyIHVzZWRMZW5ndGggPSBlc3RpbWF0ZWRHYXA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByZWxhdGl2ZUNvcmQgPSBBdXhpbGlhcnlVbml0LmNvbnZlcnRUb1JlbGF0aXZlQ29vcmQodW5pdHNbaV0sIHBhcmVudFgxICwgKHBhcmVudFkxKSArIHVzZWRMZW5ndGggKyB1bml0c1tpXS5iYm94LmgvMiwgdW5kZWZpbmVkLCBub2RlKTtcbiAgICAgICAgdW5pdHNbaV0uYmJveC54ID0gcmVsYXRpdmVDb3JkLng7XG4gICAgICAgIHVuaXRzW2ldLmJib3gueSA9IHJlbGF0aXZlQ29yZC55O1xuICAgICAgICB1c2VkTGVuZ3RoICs9IHVuaXRzW2ldLmJib3guaCsgZXN0aW1hdGVkR2FwO1xuICAgICAgfVxuICAgICAgLy9BdXhVbml0TGF5b3V0LmN1cnJlbnRMZWZ0VW5pdEdhcCA9IGVzdGltYXRlZEdhcDtcbiAgICB9XG4gICAgQXV4VW5pdExheW91dC5zZXRDdXJyZW50R2FwKGxvY2F0aW9uLCBlc3RpbWF0ZWRHYXApO1xuICB9XG5cbiAgLy9UT0RPIGZpbmQgYSB3YXkgdG8gZWxpbWF0ZSB0aGlzIHJlZHVuZGFuY3kgdG8gdXBkYXRlIGluZm8tYm94IHBvc2l0aW9uc1xuICBub2RlLmRhdGEoJ2JvcmRlci13aWR0aCcsIG5vZGUuZGF0YSgnYm9yZGVyLXdpZHRoJykpO1xuXG59O1xuXG5cbi8vIENhbGN1bGF0ZSB0b3RhbCBsZW5ndGggdXNlZCBpbiBhIHNpZGVcbi8vIFRPRE8gZmluZCBhIHdheSB0byByZWZhY3RvciwgcmVtb3ZlIHVnbGluZXNzIG9mIHRvcC1ib3R0b20vbGVmdC1yaWdodC5cbkF1eFVuaXRMYXlvdXQucHJlY29tcHV0ZUNvb3JkcyA9IGZ1bmN0aW9uIChtYWluT2JqLCBjeSwgZG9Gb3JjZVVwZGF0ZSkge1xuICBBdXhVbml0TGF5b3V0LnNldERpc3BsYXllZFVuaXRzKG1haW5PYmosIGN5KTtcbiAgdmFyIGxlbmd0aFVzZWQgPSBBdXhVbml0TGF5b3V0LmdldE91dGVyTWFyZ2luKG1haW5PYmopO1xuICB2YXIgZmluYWxMZW5ndGhVc2VkID0gbGVuZ3RoVXNlZDtcbiAgdmFyIHVuaXRHYXAgPSBBdXhVbml0TGF5b3V0LmdldFVuaXRHYXAobWFpbk9iaik7XG4gIHZhciBwYXJlbnROb2RlID0gQXV4VW5pdExheW91dC5nZXRQYXJlbnROb2RlKG1haW5PYmosIGN5KTtcblxuICBmb3IodmFyIGk9MDsgaSA8IG1haW5PYmoudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAvLyBjaGFuZ2UgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBhdXhpbGlhcnkgdW5pdCBhY2NvcmRpbmcgdG8gdGhlIGNob3NlbiBsYXlvdXRcbiAgICB2YXIgYXV4VW5pdCA9IG1haW5PYmoudW5pdHNbaV07XG4gICAgaWYgKGF1eFVuaXQuY29vcmRUeXBlICE9IFwicmVsYXRpdmVUb1NpZGVcIiB8fCBkb0ZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoYXV4VW5pdC5jb29yZFR5cGUgPT0gXCJyZWxhdGl2ZVRvQ2VudGVyXCIgfHwgZG9Gb3JjZVVwZGF0ZSkge1xuICAgICAgICBpZihBdXhVbml0TGF5b3V0LmlzVG9yQihtYWluT2JqKSkge1xuICAgICAgICAgIC8vYXV4VW5pdC5iYm94LnkgPSAwO1xuICAgICAgICAgIGF1eFVuaXQuYmJveC54ID0gbGVuZ3RoVXNlZCArIGF1eFVuaXQuYmJveC53IC8gMjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAvL2F1eFVuaXQuYmJveC54ID0gMDtcbiAgICAgICAgICBhdXhVbml0LmJib3gueSA9IGxlbmd0aFVzZWQgKyBhdXhVbml0LmJib3guaCAvIDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF1eFVuaXQuY29vcmRUeXBlID0gXCJyZWxhdGl2ZVRvU2lkZVwiO1xuICAgIH1cblxuICAgIGlmKEF1eFVuaXRMYXlvdXQuaXNUb3JCKG1haW5PYmopKSB7XG4gICAgICAvL2F1eFVuaXQuYmJveC55ID0gMDtcbiAgICAgIGxlbmd0aFVzZWQgKz0gYXV4VW5pdC5iYm94LncgKyB1bml0R2FwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vYXV4VW5pdC5iYm94LnggPSAwO1xuICAgICAgbGVuZ3RoVXNlZCArPSBhdXhVbml0LmJib3guaCArIHVuaXRHYXA7XG4gICAgfVxuXG4gICAgaWYoYXV4VW5pdC5pc0Rpc3BsYXllZCkge1xuICAgICAgZmluYWxMZW5ndGhVc2VkID0gbGVuZ3RoVXNlZDtcbiAgICB9XG4gIH1cbiAgLy8gYWRqdXN0IHRoZSBsZW5ndGgsIHNob3VsZCBiZSBjb21wb3NlZCBvZiBvdXRlck1hcmdpbiBvbiB0aGUgZW5kLCBub3QgdW5pdEdhcFxuICBmaW5hbExlbmd0aFVzZWQgPSBmaW5hbExlbmd0aFVzZWQgLSB1bml0R2FwICsgQXV4VW5pdExheW91dC5nZXRPdXRlck1hcmdpbihtYWluT2JqKTtcblxuICBtYWluT2JqLmxlbmd0aFVzZWQgPSBmaW5hbExlbmd0aFVzZWQ7XG59O1xuXG5BdXhVbml0TGF5b3V0LmRyYXcgPSBmdW5jdGlvbiAobWFpbk9iaiwgY3ksIGNvbnRleHQpIHtcbiAgZm9yKHZhciBpPTA7IGkgPCBtYWluT2JqLnVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGF1eFVuaXQgPSBtYWluT2JqLnVuaXRzW2ldO1xuICAgICAgZ2V0QXV4VW5pdENsYXNzKGF1eFVuaXQpLmRyYXcoYXV4VW5pdCwgY3ksIGNvbnRleHQpO1xuICB9XG59O1xuXG5BdXhVbml0TGF5b3V0Lm1vZGlmeVVuaXRzID0gZnVuY3Rpb24ocGFyZW50Tm9kZSwgdW5pdCwgb2xkTG9jYXRpb24sIGN5KXtcbiAgdmFyIGxvY2F0aW9uID0gdW5pdC5hbmNob3JTaWRlO1xuICB2YXIgcG9zWCA9IHVuaXQuYmJveC54O1xuICB2YXIgcG9zWSA9IHVuaXQuYmJveC55O1xuICBpZiAoIXBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtvbGRMb2NhdGlvbl0pIHtcbiAgICBwYXJlbnROb2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbb2xkTG9jYXRpb25dID0gQXV4VW5pdExheW91dC5jb25zdHJ1Y3QocGFyZW50Tm9kZSwgb2xkTG9jYXRpb24pO1xuICB9XG4gIHZhciBvbGRBdXhVbml0ID0gcGFyZW50Tm9kZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpW29sZExvY2F0aW9uXTtcbiAgdmFyIGRlbGV0ZVVuaXRzID0gb2xkQXV4VW5pdC51bml0cztcblxuICAvL0RlbGV0ZSBmcm9tIG9sZCBsb2NhdGlvblxuICB2YXIgZGVsZXRlSW5kZXg7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlVW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZihkZWxldGVVbml0c1tpXSA9PT0gdW5pdCkge1xuICAgICAgZGVsZXRlSW5kZXggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGRlbGV0ZVVuaXRzLnNwbGljZShkZWxldGVJbmRleCwgMSk7XG4gIC8vSWYgbmV3IGlzIG5vdCBjb25zdHJ1Y3RlZCBjb250cnVjdCBpbnRlcnZhbFxuICBpZiAoIXBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKVtsb2NhdGlvbl0pIHtcbiAgICBwYXJlbnROb2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbG9jYXRpb25dID0gQXV4VW5pdExheW91dC5jb25zdHJ1Y3QocGFyZW50Tm9kZSwgbG9jYXRpb24pO1xuICB9XG4gIHZhciBpbnNlcnRBdXhVbml0ID0gaW5zZXJ0VW5pdHMgPSBwYXJlbnROb2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJylbbG9jYXRpb25dO1xuICB2YXIgaW5zZXJ0VW5pdHMgPSBpbnNlcnRBdXhVbml0LnVuaXRzO1xuXG4gIHZhciBpbmRleCA9IDA7XG4gIC8vSW5zZXJ0IGludG8gbmV3IHVuaXQgYXJyYXlcbiAgaWYgKGxvY2F0aW9uID09PSBcInRvcFwiIHx8IGxvY2F0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgd2hpbGUgKCBpbnNlcnRVbml0c1tpbmRleF0gIT09IHVuZGVmaW5lZCAmJiBwb3NYID4gaW5zZXJ0VW5pdHNbaW5kZXhdLmJib3gueCkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgd2hpbGUgKCBpbnNlcnRVbml0c1tpbmRleF0gIT09IHVuZGVmaW5lZCAmJiBwb3NZID4gaW5zZXJ0VW5pdHNbaW5kZXhdLmJib3gueSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG4gIH1cbiAgaW5zZXJ0VW5pdHMuc3BsaWNlKGluZGV4LCAwLCB1bml0KTtcbn07XG5cbkF1eFVuaXRMYXlvdXQuaXNFbXB0eSA9IGZ1bmN0aW9uKG1haW5PYmopIHtcbiAgcmV0dXJuIG1haW5PYmoudW5pdHMubGVuZ3RoID09IDA7XG59O1xuXG5BdXhVbml0TGF5b3V0LnVuaXRDb3VudCA9IGZ1bmN0aW9uKG1haW5PYmopIHtcbiAgcmV0dXJuIG1haW5PYmoudW5pdHMubGVuZ3RoO1xufTtcblxuQXV4VW5pdExheW91dC51bml0TGVuZ3RoID0gZnVuY3Rpb24obWFpbk9iaikge1xuICB2YXIgdW5pdHMgPSBtYWluT2JqLnVuaXRzO1xuICB2YXIgcmlnaHRNb3N0UG9pbnQgPSAwO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGJveCA9IHVuaXRzW2ldLmJib3g7XG4gICAgaWYgKGJveC54ICsgYm94LncgLyAyID4gcmlnaHRNb3N0UG9pbnQpe1xuICAgICAgcmlnaHRNb3N0UG9pbnQgPSBib3gueCArIGJveC53IC8gMjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJpZ2h0TW9zdFBvaW50O1xufTtcblxuLy9HZXQgVW5pdCBHYXBzXG5BdXhVbml0TGF5b3V0LmdldEN1cnJlbnRUb3BHYXAgPSBmdW5jdGlvbigpe1xuICByZXR1cm4gQXV4VW5pdExheW91dC5jdXJyZW50VG9wVW5pdEdhcDtcbn1cblxuQXV4VW5pdExheW91dC5nZXRDdXJyZW50Qm90dG9tR2FwID0gZnVuY3Rpb24oKXtcbiAgcmV0dXJuIEF1eFVuaXRMYXlvdXQuY3VycmVudEJvdHRvbVVuaXRHYXA7XG59XG5cbkF1eFVuaXRMYXlvdXQuZ2V0Q3VycmVudExlZnRHYXAgPSBmdW5jdGlvbigpe1xuICByZXR1cm4gQXV4VW5pdExheW91dC5jdXJyZW50TGVmdFVuaXRHYXA7XG59XG5cbkF1eFVuaXRMYXlvdXQuZ2V0Q3VycmVudFJpZ2h0R2FwID0gZnVuY3Rpb24oKXtcbiAgcmV0dXJuIEF1eFVuaXRMYXlvdXQuY3VycmVudFJpZ2h0VW5pdEdhcDtcbn1cblxuLyoqXG4gKiBBdXRvIGNob29zZSB0aGUgbmV4dCBsYXlvdXQuIFRvIGFkZCBhIG5ldyBhdXggdW5pdCwgZm9yIGV4YW1wbGUuXG4gKi9cbkF1eFVuaXRMYXlvdXQuc2VsZWN0TmV4dEF2YWlsYWJsZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgdmFyIHRvcCA9IG5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKS50b3A7XG4gIHZhciBib3R0b20gPSBub2RlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykuYm90dG9tO1xuICB2YXIgcmVzdWx0TG9jYXRpb24gPSBcInRvcFwiO1xuICAvLyBzdGFydCBieSBhZGRpbmcgb24gdG9wIGlmIGZyZWVcbiAgaWYoIXRvcCB8fCBBdXhVbml0TGF5b3V0LmlzRW1wdHkodG9wKSkge1xuICAgIHJlc3VsdExvY2F0aW9uID0gXCJ0b3BcIjtcbiAgfVxuICBlbHNlIGlmKCFib3R0b20gfHwgQXV4VW5pdExheW91dC5pc0VtcHR5KGJvdHRvbSkpIHtcbiAgICByZXN1bHRMb2NhdGlvbiA9IFwiYm90dG9tXCI7XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gY2hvb3NlIHRoZSBzaWRlICh0b3Agb3IgYm90dG9tKSB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSByaWdodG1vc3QgaW5mb2JveFxuICAgIGlmKEF1eFVuaXRMYXlvdXQudW5pdExlbmd0aCh0b3ApIDw9IEF1eFVuaXRMYXlvdXQudW5pdExlbmd0aChib3R0b20pKSB7XG4gICAgICByZXN1bHRMb2NhdGlvbiA9IFwidG9wXCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmVzdWx0TG9jYXRpb24gPSBcImJvdHRvbVwiO1xuICAgIH1cbiAgfVxuICBBdXhVbml0TGF5b3V0Lmxhc3RQb3MgPSByZXN1bHRMb2NhdGlvbjsgLy9TZXQgbGFzdCB1c2VkIHBvc2l0aW9uXG4gIHJldHVybiByZXN1bHRMb2NhdGlvbjtcbn07XG5cbkF1eFVuaXRMYXlvdXQucmVzaXplUGFyZW50ID0gZnVuY3Rpb24gKG1haW5PYmosIGN5LCBsZW5ndGgpIHtcbiAgdmFyIHBhcmVudE5vZGUgPSBBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpO1xuICBpZihBdXhVbml0TGF5b3V0LmlzVG9yQihtYWluT2JqKSkge1xuICAgIGlmKHBhcmVudE5vZGUuZGF0YSgnYmJveCcpLncgPCBsZW5ndGgpIHtcbiAgICAgIGN5LnRyaWdnZXIoXCJub2RlZWRpdGluZy5yZXNpemVzdGFydFwiLCBbXCJjZW50ZXJyaWdodFwiLCBwYXJlbnROb2RlXSk7XG4gICAgICBwYXJlbnROb2RlLmRhdGEoJ2Jib3gnKS53ID0gbGVuZ3RoO1xuICAgICAgY3kudHJpZ2dlcihcIm5vZGVlZGl0aW5nLnJlc2l6ZWVuZFwiLCBbXCJjZW50ZXJyaWdodFwiLCBwYXJlbnROb2RlXSk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmKHBhcmVudE5vZGUuZGF0YSgnYmJveCcpLmggPCBsZW5ndGgpIHtcbiAgICAgIGN5LnRyaWdnZXIoXCJub2RlZWRpdGluZy5yZXNpemVzdGFydFwiLCBbXCJib3R0b21jZW50ZXJcIiwgcGFyZW50Tm9kZV0pO1xuICAgICAgcGFyZW50Tm9kZS5kYXRhKCdiYm94JykuaCA9IGxlbmd0aDtcbiAgICAgIGN5LnRyaWdnZXIoXCJub2RlZWRpdGluZy5yZXNpemVlbmRcIiwgW1wiYm90dG9tY2VudGVyXCIsIHBhcmVudE5vZGVdKTtcbiAgICB9XG4gIH1cbn07XG5cbkF1eFVuaXRMYXlvdXQuaXNUb3JCID0gZnVuY3Rpb24gKG1haW5PYmopIHtcbiAgcmV0dXJuIG1haW5PYmoubG9jYXRpb24gPT0gXCJ0b3BcIiB8fCBtYWluT2JqLmxvY2F0aW9uID09IFwiYm90dG9tXCI7XG59O1xuXG5BdXhVbml0TGF5b3V0LmlzTG9yUiA9IGZ1bmN0aW9uIChtYWluT2JqKSB7XG4gIHJldHVybiBtYWluT2JqLmxvY2F0aW9uID09IFwibGVmdFwiIHx8IG1haW5PYmoubG9jYXRpb24gPT0gXCJyaWdodFwiO1xufTtcblxuQXV4VW5pdExheW91dC5zZXRQYXJlbnRNaW5MZW5ndGggPSBmdW5jdGlvbiAobWFpbk9iaiwgY3kpIHtcbiAgdmFyIHBhcmVudE5vZGUgPSBBdXhVbml0TGF5b3V0LmdldFBhcmVudE5vZGUobWFpbk9iaiwgY3kpO1xuICB2YXIgcGFyZW50TGF5b3V0cyA9IHBhcmVudE5vZGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKTtcbiAgc3dpdGNoKG1haW5PYmoubG9jYXRpb24pIHtcbiAgICBjYXNlIFwidG9wXCI6XG4gICAgICB2YXIgY29tcGFyZVZhbCA9IHBhcmVudExheW91dHMuYm90dG9tID8gcGFyZW50TGF5b3V0cy5ib3R0b20ubGVuZ3RoVXNlZCA6IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICB2YXIgY29tcGFyZVZhbCA9IHBhcmVudExheW91dHMudG9wID8gcGFyZW50TGF5b3V0cy50b3AubGVuZ3RoVXNlZCA6IDA7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgdmFyIGNvbXBhcmVWYWwgPSBwYXJlbnRMYXlvdXRzLnJpZ2h0ID8gcGFyZW50TGF5b3V0cy5yaWdodC5sZW5ndGhVc2VkIDogMDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgdmFyIGNvbXBhcmVWYWwgPSBwYXJlbnRMYXlvdXRzLmxlZnQgPyBwYXJlbnRMYXlvdXRzLmxlZnQubGVuZ3RoVXNlZCA6IDA7XG4gICAgICBicmVhaztcbiAgfVxuICBpZihBdXhVbml0TGF5b3V0LmlzVG9yQihtYWluT2JqKSkge1xuICAgIHBhcmVudE5vZGUuZGF0YSgncmVzaXplTWluV2lkdGgnLCBNYXRoLm1heChtYWluT2JqLmxlbmd0aFVzZWQsIGNvbXBhcmVWYWwpKTtcbiAgfVxuICBlbHNlIHtcbiAgICBwYXJlbnROb2RlLmRhdGEoJ3Jlc2l6ZU1pbkhlaWdodCcsIE1hdGgubWF4KG1haW5PYmoubGVuZ3RoVXNlZCwgY29tcGFyZVZhbCkpO1xuICB9XG59O1xuXG5BdXhVbml0TGF5b3V0LmdldE91dGVyTWFyZ2luID0gZnVuY3Rpb24gKG1haW5PYmopIHtcbiAgaWYodHlwZW9mIG1haW5PYmoub3V0ZXJNYXJnaW4gIT09IFwidW5kZWZpbmVkXCIgJiYgbWFpbk9iai5vdXRlck1hcmdpbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtYWluT2JqLm91dGVyTWFyZ2luO1xuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBBdXhVbml0TGF5b3V0Lm91dGVyTWFyZ2luO1xuICB9XG59O1xuXG5BdXhVbml0TGF5b3V0LmdldFVuaXRHYXAgPSBmdW5jdGlvbiAobWFpbk9iaikge1xuICBpZih0eXBlb2YgbWFpbk9iai51bml0R2FwICE9PSBcInVuZGVmaW5lZFwiICYmIG1haW5PYmoudW5pdEdhcCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtYWluT2JqLnVuaXRHYXA7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIEF1eFVuaXRMYXlvdXQudW5pdEdhcDtcbiAgfVxufTtcblxuQXV4VW5pdExheW91dC5nZXRBbHdheXNTaG93QXV4VW5pdHMgPSBmdW5jdGlvbiAobWFpbk9iaikge1xuICBpZih0eXBlb2YgbWFpbk9iai5hbHdheXNTaG93QXV4VW5pdHMgIT09IFwidW5kZWZpbmVkXCIgJiYgbWFpbk9iai5hbHdheXNTaG93QXV4VW5pdHMgIT09IG51bGwpIHtcbiAgICByZXR1cm4gbWFpbk9iai5hbHdheXNTaG93QXV4VW5pdHM7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIEF1eFVuaXRMYXlvdXQuYWx3YXlzU2hvd0F1eFVuaXRzO1xuICB9XG59O1xuXG5BdXhVbml0TGF5b3V0LmdldE1heFVuaXREaXNwbGF5ZWQgPSBmdW5jdGlvbiAobWFpbk9iaikge1xuICBpZih0eXBlb2YgbWFpbk9iai5tYXhVbml0RGlzcGxheWVkICE9PSBcInVuZGVmaW5lZFwiICYmIG1haW5PYmoubWF4VW5pdERpc3BsYXllZCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtYWluT2JqLm1heFVuaXREaXNwbGF5ZWQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIEF1eFVuaXRMYXlvdXQubWF4VW5pdERpc3BsYXllZDtcbiAgfVxufTtcblxuLypcbiAqICBEdXBsaWNhdGUgYSBsYXlvdXQuIERvZXNuJ3QgY29weSB0aGUgdW5pdHMgYXR0cmlidXRlLCByZXNldCBpdCBpbnN0ZWFkLlxuICovXG5BdXhVbml0TGF5b3V0LmNvcHkgPSBmdW5jdGlvbihtYWluT2JqLCBjeSwgbmV3UGFyZW50KSB7XG4gIHZhciBuZXdMYXlvdXQgPSBBdXhVbml0TGF5b3V0LmNvbnN0cnVjdChuZXdQYXJlbnQpO1xuICAvLyBDb3B5aW5nIHRoZSBzYW1lIHJlZmVyZW5jZSB0byB1bml0cyB3b3VsZCBiZSBpbmNvbnNpc3RlbnQuXG4gIC8vIER1cGxpY2F0aW5nIG93bmVkIHVuaXRzIGdvZXMgYmV5b25uZCB0aGUgc2NvcGUsIGJlY2F1c2Ugd2UgbmVlZCB0byBhc3NpZ25cbiAgLy8gaWRzIHRoYXQgYXJlIHRpZWQgdG8gdGhlIGdsb2JhbCBjb3VuZCBvZiB1bml0cyBvZiBhIG5vZGUuXG4gIC8vIFNvIGR1cGxpY2F0aW5nIHVuaXRzIGlzIHNvbWV0aGluZyB0aGF0IHNob3VsZCBiZSBwcm9wZXJseSBkb25lIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbi5cbiAgLy8gVE9ETyB0aGF0IGlzIGEgYml0IGRpcnR5LCBmaW5kIGEgbmljZSBtb2R1bGFyIHdheSB0byBhcnJhbmdlIHRoYXRcbiAgbmV3TGF5b3V0LnVuaXRzID0gW107XG4gIG5ld0xheW91dC5sb2NhdGlvbiA9IG1haW5PYmoubG9jYXRpb247XG4gIG5ld0xheW91dC5hbGlnbm1lbnQgPSBtYWluT2JqLmFsaWdubWVudDtcbiAgQXV4VW5pdExheW91dC5zZXRQYXJlbnROb2RlUmVmKG5ld0xheW91dCwgbmV3UGFyZW50KTtcbiAgbmV3TGF5b3V0LnJlbmRlckxlbmd0aENhY2hlID0gbWFpbk9iai5yZW5kZXJMZW5ndGhDYWNoZTtcbiAgbmV3TGF5b3V0Lmxlbmd0aFVzZWQgPSBtYWluT2JqLmxlbmd0aFVzZWQ7XG4gIGlmKHR5cGVvZiBtYWluT2JqLm91dGVyTWFyZ2luICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgbmV3TGF5b3V0Lm91dGVyTWFyZ2luID0gbWFpbk9iai5vdXRlck1hcmdpbjtcbiAgfVxuICBpZih0eXBlb2YgbWFpbk9iai51bml0R2FwICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgbmV3TGF5b3V0LnVuaXRHYXAgPSBtYWluT2JqLnVuaXRHYXA7XG4gIH1cbiAgaWYodHlwZW9mIG1haW5PYmouYWx3YXlzU2hvd0F1eFVuaXRzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgbmV3TGF5b3V0LmFsd2F5c1Nob3dBdXhVbml0cyA9IG1haW5PYmouYWx3YXlzU2hvd0F1eFVuaXRzO1xuICB9XG4gIGlmKHR5cGVvZiBtYWluT2JqLm1heFVuaXREaXNwbGF5ZWQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBuZXdMYXlvdXQubWF4VW5pdERpc3BsYXllZCA9IG1haW5PYmoubWF4VW5pdERpc3BsYXllZDtcbiAgfVxuICByZXR1cm4gbmV3TGF5b3V0O1xufTtcblxubnMuQXV4VW5pdExheW91dCA9IEF1eFVuaXRMYXlvdXQ7XG4vLyAtLS0tLS0tLS0tLS0tLSBFTkQgQXV4VW5pdExheW91dCAtLS0tLS0tLS0tLS0tLSAvL1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5zO1xuIiwiLypcbiAqIENvbW1vbiB1dGlsaXRpZXMgZm9yIGVsZW1lbnRzIGluY2x1ZGVzIGJvdGggZ2VuZXJhbCB1dGlsaXRpZXMgYW5kIHNiZ24gc3BlY2lmaWMgdXRpbGl0aWVzXG4gKi9cblxudmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpO1xudmFyIHRleHRVdGlsaXRpZXMgPSByZXF1aXJlKCcuL3RleHQtdXRpbGl0aWVzJyk7XG52YXIgbGlicyA9IGxpYlV0aWxpdGllcy5nZXRMaWJzKCk7XG52YXIgalF1ZXJ5ID0gJCA9IGxpYnMualF1ZXJ5O1xudmFyIGNsYXNzZXMgPSByZXF1aXJlKCcuL2NsYXNzZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgb3B0aW9uVXRpbGl0aWVzLCBncmFwaFV0aWxpdGllcztcbiAgdmFyIG9wdGlvbnM7XG4gIHZhciBjeTtcblxuICBmdW5jdGlvbiBlbGVtZW50VXRpbGl0aWVzIChwYXJhbSkge1xuICAgIC8vIEluaXQgcGFyYW1zIHRvIGJlIGFjY2Vzc2VkIGJ5IGVsZW1lbnRVdGlsaXRpZXNcbiAgICBvcHRpb25VdGlsaXRpZXMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXM7XG4gICAgb3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG4gICAgZ3JhcGhVdGlsaXRpZXMgPSBwYXJhbS5ncmFwaFV0aWxpdGllcztcbiAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG4gIH1cblxuICB2YXIgaW5BcnJheSA9IGZ1bmN0aW9uKCB2YWx1ZSwgYXJyICkge1xuICAgIHJldHVybiAkLmluQXJyYXkoIHZhbHVlLCBhcnIgKSAhPT0gLTE7XG4gIH07XG5cbiAgLy8gaW5pdGlhbGl6ZSBtYXAgdHlwZVxuICBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgPSAnUEQnO1xuICBlbGVtZW50VXRpbGl0aWVzLmZpbGVGb3JtYXQgPSB1bmRlZmluZWQ7XG5cbiAgZWxlbWVudFV0aWxpdGllcy5QRCA9IHt9OyAvLyBuYW1lc3BhY2UgZm9yIGFsbCBQRCBzcGVjaWZpYyBzdHVmZlxuICBlbGVtZW50VXRpbGl0aWVzLkFGID0ge307IC8vIG5hbWVzcGFjZSBmb3IgYWxsIEFGIHNwZWNpZmljIHN0dWZmXG4gIGVsZW1lbnRVdGlsaXRpZXMuU0lGID0ge307IC8vIG5hbWVzcGFjZSBmb3IgYWxsIFNJRiBzcGVjaWZpYyBzdHVmZlxuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ3JhcGhUb3BvbG9neUxvY2tlZCA9IGZhbHNlO1xuXG4gIC8vIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS84ODA5NDcyXG4gIC8vIHdlIG5lZWQgdG8gdGFrZSBjYXJlIG9mIG91ciBvd24gSURzIGJlY2F1c2UgdGhlIG9uZXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY3l0b3NjYXBlIChhbHNvIFVVSUQpXG4gIC8vIGRvbid0IGNvbXBseSB3aXRoIHhzZDpTSUQgdHlwZSB0aGF0IG11c3Qgbm90IGJlZ2luIHdpdGggYSBudW1iZXJcbiAgZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZVVVSUQgPSBmdW5jdGlvbiAoKSB7IC8vIFB1YmxpYyBEb21haW4vTUlUXG4gICAgICB2YXIgZCA9IERhdGUubm93KCk7XG4gICAgICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nKXtcbiAgICAgICAgICBkICs9IHBlcmZvcm1hbmNlLm5vdygpOyAvL3VzZSBoaWdoLXByZWNpc2lvbiB0aW1lciBpZiBhdmFpbGFibGVcbiAgICAgIH1cbiAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgICAgdmFyIHIgPSAoZCArIE1hdGgucmFuZG9tKCkgKiAxNikgJSAxNiB8IDA7XG4gICAgICAgICAgZCA9IE1hdGguZmxvb3IoZCAvIDE2KTtcbiAgICAgICAgICByZXR1cm4gKGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCkpLnRvU3RyaW5nKDE2KTtcbiAgICAgIH0pO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVOb2RlSWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ253dE5fJyArIGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVVVUlEKCk7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZUVkZ2VJZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnbnd0RV8nICsgZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZVVVSUQoKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlU3RhdGVWYXJJZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnbnd0U1ZfJyArIGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVVVUlEKCk7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZW5lcmF0ZVVuaXRPZkluZm9JZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnbnd0VU9JXycgKyBlbGVtZW50VXRpbGl0aWVzLmdlbmVyYXRlVVVJRCgpO1xuICB9O1xuXG4gIC8qXG4gICAgc2VlIGh0dHA6Ly9qb3VybmFsLmltYmlvLmRlL2FydGljbGVzL3BkZi9qaWItMjYzLnBkZiBwLjQxIDwtLSBidXQgYmV3YXJlLCBvdXRkYXRlZFxuICAgIGZvbGxvd2luZyB0YWJsZXMgaGF2ZSBiZWVuIHVwZGF0ZWQgd2l0aCBQRCBsdmwxIHYyLjAgb2YgTm92ZW1iZXIgNywgMjAxNiB3b3JraW5nIGRyYWZ0XG4gICAgb25seSB0aGUgZm9sbG93aW5nIHRoaW5ncyBoYXZlIGJlZW4gY2hhbmdlZCBmcm9tIDIuMCAodGhpcyB2ZXJzaW9uIGlzIG5vdCBjbGVhciBvbiBjb25uZWN0aXZpdHkpOlxuICAgICAtIGVtcHR5IHNldCBoYXMgbm8gbGltaXQgb24gaXRzIGVkZ2UgY291bnRcbiAgICAgLSBsb2dpYyBvcGVyYXRvcnMgY2FuIGJlIHNvdXJjZSBhbmQgdGFyZ2V0XG4gICAgIC0gbGltaXQgb2YgMSBjYXRhbHlzaXMgYW5kIDEgbmVjZXNzYXJ5IHN0aW11bGF0aW9uIG9uIGEgcHJvY2Vzc1xuXG4gICAgZm9yIGVhY2ggZWRnZSBjbGFzcyBhbmQgbm9kZWNsYXNzIGRlZmluZSAyIGNhc2VzOlxuICAgICAtIG5vZGUgY2FuIGJlIGEgc291cmNlIG9mIHRoaXMgZWRnZSAtPiBhc1NvdXJjZVxuICAgICAtIG5vZGUgY2FuIGJlIGEgdGFyZ2V0IG9mIHRoaXMgZWRnZSAtPiBhc1RhcmdldFxuICAgIGZvciBib3RoIGNhc2VzLCB0ZWxscyBpZiBpdCBpcyBhbGxvd2VkIGFuZCB3aGF0IGlzIHRoZSBsaW1pdCBvZiBlZGdlcyBhbGxvd2VkLlxuICAgIExpbWl0cyBjYW4gY29uY2VybiBvbmx5IHRoaXMgdHlwZSBvZiBlZGdlIChtYXhFZGdlKSBvciB0aGUgdG90YWwgbnVtYmVyIG9mIGVkZ2VzIGZvciB0aGlzIG5vZGUgKG1heFRvdGFsKS5cbiAgICBDb25zaWRlciB1bmRlZmluZWQgdGhpbmdzIGFzIGZhbHNlL3VuYWxsb3dlZCAtPiB3aGl0ZWxpc3QgYmVoYXZpb3IuXG5cbiAgICB0aGUgbm9kZXMvZWRnZXMgY2xhc3MgbGlzdGVkIGJlbG93IGFyZSB0aG9zZSB1c2VkIGluIHRoZSBwcm9ncmFtLlxuICAgIEZvciBpbnN0YW5jZSBcImNvbXBhcnRtZW50XCIgaXNuJ3QgYSBub2RlIGluIFNCR04gc3BlY3MuXG4gICovXG4gIGVsZW1lbnRVdGlsaXRpZXMuUEQuY29ubmVjdGl2aXR5Q29uc3RyYWludHMgPSB7XG4gICAgXCJjb25zdW1wdGlvblwiOiB7XG4gICAgICBcIm1hY3JvbW9sZWN1bGVcIjogICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInVuc3BlY2lmaWVkIGVudGl0eVwiOiAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBsZXhcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBhcnRtZW50XCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJlbXB0eSBzZXRcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwZXJ0dXJiaW5nIGFnZW50XCI6ICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicHJvY2Vzc1wiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJvbWl0dGVkIHByb2Nlc3NcIjogICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInVuY2VydGFpbiBwcm9jZXNzXCI6ICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhc3NvY2lhdGlvblwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcImRpc3NvY2lhdGlvblwiOiAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwicHJvZHVjdGlvblwiOiB7XG4gICAgICBcIm1hY3JvbW9sZWN1bGVcIjogICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwic2ltcGxlIGNoZW1pY2FsXCI6ICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJ1bnNwZWNpZmllZCBlbnRpdHlcIjogICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcImNvbXBsZXhcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZW1wdHkgc2V0XCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJwZXJ0dXJiaW5nIGFnZW50XCI6ICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicHJvY2Vzc1wiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib21pdHRlZCBwcm9jZXNzXCI6ICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidW5jZXJ0YWluIHByb2Nlc3NcIjogICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhc3NvY2lhdGlvblwiOiAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJkaXNzb2NpYXRpb25cIjogICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm9yXCI6ICAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcIm1vZHVsYXRpb25cIjoge1xuICAgICAgXCJtYWNyb21vbGVjdWxlXCI6ICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzaW1wbGUgY2hlbWljYWxcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bnNwZWNpZmllZCBlbnRpdHlcIjogICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wbGV4XCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZW1wdHkgc2V0XCI6ICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGVydHVyYmluZyBhZ2VudFwiOiAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwcm9jZXNzXCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIm9taXR0ZWQgcHJvY2Vzc1wiOiAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwidW5jZXJ0YWluIHByb2Nlc3NcIjogICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcImFzc29jaWF0aW9uXCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGlzc29jaWF0aW9uXCI6ICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcInN0aW11bGF0aW9uXCI6IHtcbiAgICAgIFwibWFjcm9tb2xlY3VsZVwiOiAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic2ltcGxlIGNoZW1pY2FsXCI6ICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidW5zcGVjaWZpZWQgZW50aXR5XCI6ICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGxleFwiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImVtcHR5IHNldFwiOiAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInBlcnR1cmJpbmcgYWdlbnRcIjogICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicHJvY2Vzc1wiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJvbWl0dGVkIHByb2Nlc3NcIjogICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInVuY2VydGFpbiBwcm9jZXNzXCI6ICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJhc3NvY2lhdGlvblwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRpc3NvY2lhdGlvblwiOiAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJjYXRhbHlzaXNcIjoge1xuICAgICAgXCJtYWNyb21vbGVjdWxlXCI6ICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzaW1wbGUgY2hlbWljYWxcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bnNwZWNpZmllZCBlbnRpdHlcIjogICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wbGV4XCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBhcnRtZW50XCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJlbXB0eSBzZXRcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwZXJ0dXJiaW5nIGFnZW50XCI6ICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicHJvY2Vzc1wiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMX19LFxuICAgICAgXCJvbWl0dGVkIHByb2Nlc3NcIjogICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxfX0sXG4gICAgICBcInVuY2VydGFpbiBwcm9jZXNzXCI6ICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDF9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMX19LFxuICAgICAgXCJhc3NvY2lhdGlvblwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRpc3NvY2lhdGlvblwiOiAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJpbmhpYml0aW9uXCI6IHtcbiAgICAgIFwibWFjcm9tb2xlY3VsZVwiOiAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic2ltcGxlIGNoZW1pY2FsXCI6ICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidW5zcGVjaWZpZWQgZW50aXR5XCI6ICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGxleFwiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibnVjbGVpYyBhY2lkIGZlYXR1cmVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImVtcHR5IHNldFwiOiAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInBlcnR1cmJpbmcgYWdlbnRcIjogICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicHJvY2Vzc1wiOiAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJvbWl0dGVkIHByb2Nlc3NcIjogICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInVuY2VydGFpbiBwcm9jZXNzXCI6ICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJhc3NvY2lhdGlvblwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRpc3NvY2lhdGlvblwiOiAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJuZWNlc3Nhcnkgc3RpbXVsYXRpb25cIjoge1xuICAgICAgXCJtYWNyb21vbGVjdWxlXCI6ICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzaW1wbGUgY2hlbWljYWxcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bnNwZWNpZmllZCBlbnRpdHlcIjogICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wbGV4XCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZW1wdHkgc2V0XCI6ICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGVydHVyYmluZyBhZ2VudFwiOiAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwcm9jZXNzXCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxfX0sXG4gICAgICBcIm9taXR0ZWQgcHJvY2Vzc1wiOiAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDF9fSxcbiAgICAgIFwidW5jZXJ0YWluIHByb2Nlc3NcIjogICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxfX0sXG4gICAgICBcImFzc29jaWF0aW9uXCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGlzc29jaWF0aW9uXCI6ICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICAgICBhc1RhcmdldDoge319LFxuICAgIH0sXG4gICAgXCJsb2dpYyBhcmNcIjoge1xuICAgICAgXCJtYWNyb21vbGVjdWxlXCI6ICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzaW1wbGUgY2hlbWljYWxcIjogICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bnNwZWNpZmllZCBlbnRpdHlcIjogICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wbGV4XCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZW1wdHkgc2V0XCI6ICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGVydHVyYmluZyBhZ2VudFwiOiAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzdWJtYXBcIjogICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInByb2Nlc3NcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib21pdHRlZCBwcm9jZXNzXCI6ICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bmNlcnRhaW4gcHJvY2Vzc1wiOiAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInBoZW5vdHlwZVwiOiAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYXNzb2NpYXRpb25cIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJkaXNzb2NpYXRpb25cIjogICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIm9yXCI6ICAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIm5vdFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgICAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX19LFxuICAgIH0sXG4gICAgXCJlcXVpdmFsZW5jZSBhcmNcIjoge1xuICAgICAgXCJtYWNyb21vbGVjdWxlXCI6ICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInNpbXBsZSBjaGVtaWNhbFwiOiAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidW5zcGVjaWZpZWQgZW50aXR5XCI6ICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wbGV4XCI6ICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm51Y2xlaWMgYWNpZCBmZWF0dXJlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcImVtcHR5IHNldFwiOiAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwicGVydHVyYmluZyBhZ2VudFwiOiAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzdWJtYXBcIjogICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInByb2Nlc3NcIjogICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib21pdHRlZCBwcm9jZXNzXCI6ICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJ1bmNlcnRhaW4gcHJvY2Vzc1wiOiAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInBoZW5vdHlwZVwiOiAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYXNzb2NpYXRpb25cIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJkaXNzb2NpYXRpb25cIjogICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9XG4gIH07XG5cbiAgLyogQUYgbm9kZSBjb25uZWN0aXZpdHkgcnVsZXNcbiAgICogU2VlOiBTeXN0ZW1zIEJpb2xvZ3kgR3JhcGhpY2FsIE5vdGF0aW9uOiBBY3Rpdml0eSBGbG93IGxhbmd1YWdlIExldmVsIDEsIFZlcnNpb24gMS4yLCBEYXRlOiBKdWx5IDI3LCAyMDE1XG4gICAqICAgU2VjdGlvbiAzLjMuMTogQWN0aXZpdHkgTm9kZXMgY29ubmVjdGl2aXR5IGRlZmluaXRpb25cbiAgICogICBVUkw6IGh0dHBzOi8vZG9pLm9yZy8xMC4yMzkwL2JpZWNvbGwtamliLTIwMTUtMjY1XG4gICAqL1xuICBlbGVtZW50VXRpbGl0aWVzLkFGLmNvbm5lY3Rpdml0eUNvbnN0cmFpbnRzID0ge1xuICAgIFwicG9zaXRpdmUgaW5mbHVlbmNlXCI6IHtcbiAgICAgIFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiOiAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJvclwiOiAgICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJkZWxheVwiOiAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWUsIG1heEVkZ2U6IDEsIG1heFRvdGFsOiAxfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJjb21wYXJ0bWVudFwiOiAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgfSxcbiAgICBcIm5lZ2F0aXZlIGluZmx1ZW5jZVwiOiB7XG4gICAgICBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjogIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGVsYXlcIjogICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgIH0sXG4gICAgXCJ1bmtub3duIGluZmx1ZW5jZVwiOiB7XG4gICAgICBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjogIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwicGhlbm90eXBlXCI6ICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJ0YWdcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInN1Ym1hcFwiOiAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiYW5kXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiZGVsYXlcIjogICAgICAgICAgICAgICAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlLCBtYXhFZGdlOiAxLCBtYXhUb3RhbDogMX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgIH0sXG4gICAgXCJuZWNlc3Nhcnkgc3RpbXVsYXRpb25cIjoge1xuICAgICAgXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI6ICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcInBoZW5vdHlwZVwiOiAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJzdWJtYXBcIjogICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm9yXCI6ICAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcIm5vdFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRlbGF5XCI6ICAgICAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImNvbXBhcnRtZW50XCI6ICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICB9LFxuICAgIFwibG9naWMgYXJjXCI6IHtcbiAgICAgIFwiYmlvbG9naWNhbCBhY3Rpdml0eVwiOiAge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJwaGVub3R5cGVcIjogICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInRhZ1wiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwic3VibWFwXCI6ICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJhbmRcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIm9yXCI6ICAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwibm90XCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9fSxcbiAgICAgIFwiZGVsYXlcIjogICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZSwgbWF4RWRnZTogMSwgbWF4VG90YWw6IDF9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgIH0sXG4gICAgXCJlcXVpdmFsZW5jZSBhcmNcIjoge1xuICAgICAgXCJiaW9sb2dpY2FsIGFjdGl2aXR5XCI6ICB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcInBoZW5vdHlwZVwiOiAgICAgICAgICAgIHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwidGFnXCI6ICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJzdWJtYXBcIjogICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcImFuZFwiOiAgICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwib3JcIjogICAgICAgICAgICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJub3RcIjogICAgICAgICAgICAgICAgICB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX0sXG4gICAgICBcImRlbGF5XCI6ICAgICAgICAgICAgICAgIHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiY29tcGFydG1lbnRcIjogICAgICAgICAge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgIH0sXG4gIH1cblxuICBlbGVtZW50VXRpbGl0aWVzLlNJRi5jb25uZWN0aXZpdHlDb25zdHJhaW50cyA9IHtcbiAgICBcImNvbnRyb2xzLXN0YXRlLWNoYW5nZS1vZlwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiY29udHJvbHMtdHJhbnNwb3J0LW9mXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJjb250cm9scy1waG9zcGhvcnlsYXRpb24tb2ZcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImNvbnRyb2xzLWV4cHJlc3Npb24tb2ZcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImNhdGFseXNpcy1wcmVjZWRlc1wiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiaW4tY29tcGxleC13aXRoXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJpbnRlcmFjdHMtd2l0aFwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwibmVpZ2hib3Itb2ZcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImNvbnN1bXB0aW9uLWNvbnRyb2xlZC1ieVwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiY29udHJvbHMtcHJvZHVjdGlvbi1vZlwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX1cbiAgICB9LFxuICAgIFwiY29udHJvbHMtdHJhbnNwb3J0LW9mLWNoZW1pY2FsXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fVxuICAgIH0sXG4gICAgXCJjaGVtaWNhbC1hZmZlY3RzXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJyZWFjdHMtd2l0aFwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX1cbiAgICB9LFxuICAgIFwidXNlZC10by1wcm9kdWNlXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fVxuICAgIH0sXG4gICAgXCJhY3RpdmF0ZXNcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImluaGliaXRzXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJwaG9zcGhvcnlsYXRlc1wiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiZGVwaG9zcGhvcnlsYXRlc1wiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwidXByZWd1bGF0ZXMtZXhwcmVzc2lvblwiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiZG93bnJlZ3VsYXRlcy1leHByZXNzaW9uXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJhY3RpdmF0ZXMtZ3RwYXNlXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG4gICAgXCJpbmhpYml0cy1ndHBhc2VcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImFjZXR5bGF0ZXNcIjoge1xuICAgICAgXCJTSUYgbWFjcm9tb2xlY3VsZVwiOiB7YXNTb3VyY2U6IHtpc0FsbG93ZWQ6IHRydWV9LCAgIGFzVGFyZ2V0OiB7aXNBbGxvd2VkOiB0cnVlfX0sXG4gICAgICBcIlNJRiBzaW1wbGUgY2hlbWljYWxcIjoge2FzU291cmNlOiB7fSwgICBhc1RhcmdldDoge319XG4gICAgfSxcbiAgICBcImRlYWNldHlsYXRlc1wiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwibWV0aHlsYXRlc1wiOiB7XG4gICAgICBcIlNJRiBtYWNyb21vbGVjdWxlXCI6IHthc1NvdXJjZToge2lzQWxsb3dlZDogdHJ1ZX0sICAgYXNUYXJnZXQ6IHtpc0FsbG93ZWQ6IHRydWV9fSxcbiAgICAgIFwiU0lGIHNpbXBsZSBjaGVtaWNhbFwiOiB7YXNTb3VyY2U6IHt9LCAgIGFzVGFyZ2V0OiB7fX1cbiAgICB9LFxuICAgIFwiZGVtZXRoeWxhdGVzXCI6IHtcbiAgICAgIFwiU0lGIG1hY3JvbW9sZWN1bGVcIjoge2FzU291cmNlOiB7aXNBbGxvd2VkOiB0cnVlfSwgICBhc1RhcmdldDoge2lzQWxsb3dlZDogdHJ1ZX19LFxuICAgICAgXCJTSUYgc2ltcGxlIGNoZW1pY2FsXCI6IHthc1NvdXJjZToge30sICAgYXNUYXJnZXQ6IHt9fVxuICAgIH0sXG5cbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmxvZ2ljYWxPcGVyYXRvclR5cGVzID0gWydhbmQnLCAnb3InLCAnbm90JywgJ2RlbGF5J107XG4gIGVsZW1lbnRVdGlsaXRpZXMucHJvY2Vzc1R5cGVzID0gWydwcm9jZXNzJywgJ29taXR0ZWQgcHJvY2VzcycsICd1bmNlcnRhaW4gcHJvY2VzcycsXG4gICAgJ2Fzc29jaWF0aW9uJywgJ2Rpc3NvY2lhdGlvbicsICdwaGVub3R5cGUnXTtcbiAgZWxlbWVudFV0aWxpdGllcy5iaW9sb2dpY2FsQWN0aXZpdHlUeXBlcyA9IFsnYmlvbG9naWNhbCBhY3Rpdml0eScsICdCQSBwbGFpbicsICdCQSB1bnNwZWNpZmllZCBlbnRpdHknLFxuICAgICdCQSBzaW1wbGUgY2hlbWljYWwnLCAnQkEgbWFjcm9tb2xlY3VsZScsICdCQSBudWNsZWljIGFjaWQgZmVhdHVyZScsXG4gICAgJ0JBIHBlcnR1cmJpbmcgYWdlbnQnLCAnQkEgY29tcGxleCddO1xuICBlbGVtZW50VXRpbGl0aWVzLmVwblR5cGVzID0gWydtYWNyb21vbGVjdWxlJywgJ251Y2xlaWMgYWNpZCBmZWF0dXJlJywgJ3NpbXBsZSBjaGVtaWNhbCcsXG4gICAgJ2VtcHR5IHNldCcsICd1bnNwZWNpZmllZCBlbnRpdHknLCAncGVydHVyYmluZyBhZ2VudCcsICdjb21wbGV4JywgXG4gICAgJ251Y2xlaWMgYWNpZCBmZWF0dXJlIG11bHRpbWVyJywgJ21hY3JvbW9sZWN1bGUgbXVsdGltZXInLCAnc2ltcGxlIGNoZW1pY2FsIG11bHRpbWVyJywgJ2NvbXBsZXggbXVsdGltZXInXTtcbiAgZWxlbWVudFV0aWxpdGllcy5zaWZUeXBlcyA9IFsnU0lGIG1hY3JvbW9sZWN1bGUnLCAnU0lGIHNpbXBsZSBjaGVtaWNhbCddO1xuICBlbGVtZW50VXRpbGl0aWVzLm90aGVyTm9kZVR5cGVzID0gWydjb21wYXJ0bWVudCcsICd0YWcnLCAnc3VibWFwJywgJ3RvcG9sb2d5IGdyb3VwJ107XG5cbiAgZWxlbWVudFV0aWxpdGllcy5ub2RlVHlwZXMgPSBlbGVtZW50VXRpbGl0aWVzLmVwblR5cGVzXG4gICAgLmNvbmNhdCggZWxlbWVudFV0aWxpdGllcy5sb2dpY2FsT3BlcmF0b3JUeXBlcyApXG4gICAgLmNvbmNhdCggZWxlbWVudFV0aWxpdGllcy5wcm9jZXNzVHlwZXMgKVxuICAgIC5jb25jYXQoIGVsZW1lbnRVdGlsaXRpZXMuYmlvbG9naWNhbEFjdGl2aXR5VHlwZXMgKVxuICAgIC5jb25jYXQoIGVsZW1lbnRVdGlsaXRpZXMuc2lmVHlwZXMgKVxuICAgIC5jb25jYXQoIGVsZW1lbnRVdGlsaXRpZXMub3RoZXJOb2RlVHlwZXMgKTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmNvbXBvdW5kTm9kZVR5cGVzID0gWydjb21wbGV4JywgJ2NvbXBhcnRtZW50JywgJ3N1Ym1hcCddO1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuc2ltcGxlTm9kZVR5cGVzID0gJChlbGVtZW50VXRpbGl0aWVzLm5vZGVUeXBlcylcbiAgICAubm90KGVsZW1lbnRVdGlsaXRpZXMuY29tcG91bmROb2RlVHlwZXMpLmdldCgpO1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuc2lmRWRnZVR5cGVzID0gWyduZWlnaGJvci1vZicsICdpbnRlcmFjdHMtd2l0aCcsICdpbi1jb21wbGV4LXdpdGgnLFxuICAgICdjb250cm9scy1zdGF0ZS1jaGFuZ2Utb2YnLCAnY29udHJvbHMtdHJhbnNwb3J0LW9mJywgJ2NvbnRyb2xzLXBob3NwaG9yeWxhdGlvbi1vZicsXG4gICAgJ2NhdGFseXNpcy1wcmVjZWRlcycsICdjb250cm9scy1leHByZXNzaW9uLW9mJywgJ2NvbnN1bXB0aW9uLWNvbnRyb2xlZC1ieScsXG4gICAgJ2NvbnRyb2xzLXByb2R1Y3Rpb24tb2YnLCAnY29udHJvbHMtdHJhbnNwb3J0LW9mLWNoZW1pY2FsJywgJ2NoZW1pY2FsLWFmZmVjdHMnLFxuICAgICdyZWFjdHMtd2l0aCcsICd1c2VkLXRvLXByb2R1Y2UnLCAncGhvc3Bob3J5bGF0ZXMnLCAnZGVwaG9zcGhvcnlsYXRlcycsXG4gICAgJ3VwcmVndWxhdGVzLWV4cHJlc3Npb24nLCAnZG93bnJlZ3VsYXRlcy1leHByZXNzaW9uJywgJ2FjdGl2YXRlcycsICdpbmhpYml0cycsXG4gICAgJ2FjdGl2YXRlcy1ndHBhc2UnLCAnaW5oaWJpdHMtZ3RwYXNlJywgJ2FjZXR5bGF0ZXMnLCAnZGVhY2V0eWxhdGVzJyxcbiAgICAnbWV0aHlsYXRlcycsICdkZW1ldGh5bGF0ZXMnXTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmVkZ2VUeXBlcyA9IFsnY29uc3VtcHRpb24nLCAncHJvZHVjdGlvbicsICdtb2R1bGF0aW9uJyxcbiAgICAnc3RpbXVsYXRpb24nLCAnY2F0YWx5c2lzJywgJ2luaGliaXRpb24nLCAnbmVjZXNzYXJ5IHN0aW11bGF0aW9uJyxcbiAgICAnbG9naWMgYXJjJywgJ2VxdWl2YWxlbmNlIGFyYycsICd1bmtub3duIGluZmx1ZW5jZScsICdwb3NpdGl2ZSBpbmZsdWVuY2UnLFxuICAgICduZWdhdGl2ZSBpbmZsdWVuY2UnLCAnY29udHJvbHMtc3RhdGUtY2hhbmdlLW9mJyxcbiAgICAnY29udHJvbHMtdHJhbnNwb3J0LW9mJywgJ2NvbnRyb2xzLXBob3NwaG9yeWxhdGlvbi1vZicsXG4gICAgJ2NvbnRyb2xzLWV4cHJlc3Npb24tb2YnLCAnY2F0YWx5c2lzLXByZWNlZGVzJywgJ2luLWNvbXBsZXgtd2l0aCcsXG4gICAgJ2ludGVyYWN0cy13aXRoJywgJ25laWdoYm9yLW9mJywgJ2NvbnN1bXB0aW9uLWNvbnRyb2xlZC1ieScsXG4gICAgJ2NvbnRyb2xzLXByb2R1Y3Rpb24tb2YnLCAnY29udHJvbHMtdHJhbnNwb3J0LW9mLWNoZW1pY2FsJyxcbiAgICAnY2hlbWljYWwtYWZmZWN0cycsICdyZWFjdHMtd2l0aCcsICd1c2VkLXRvLXByb2R1Y2UnLFxuICAgICdhY3RpdmF0ZXMnLCAnaW5oaWJpdHMnLCAncGhvc3Bob3J5bGF0ZXMnLCAnZGVwaG9zcGhvcnlsYXRlcycsXG4gICAgJ3VwcmVndWxhdGVzLWV4cHJlc3Npb24nLCAnZG93bnJlZ3VsYXRlcy1leHByZXNzaW9uJywgJ2FjdGl2YXRlcy1ndHBhc2UnLFxuICAgICdpbmhpYml0cy1ndHBhc2UnLCAnYWNldHlsYXRlcycsICdkZWFjZXR5bGF0ZXMnLCAnbWV0aHlsYXRlcycsICdkZW1ldGh5bGF0ZXMnXG4gIF07XG5cbiAgZWxlbWVudFV0aWxpdGllcy51bmRpcmVjdGVkRWRnZVR5cGVzID0gWydpbi1jb21wbGV4LXdpdGgnLCAnaW50ZXJhY3RzLXdpdGgnLFxuICAgICduZWlnaGJvci1vZicsICdsb2dpYyBhcmMnLCAnZXF1aXZhbGVuY2UgYXJjJ107XG5cbiAgZWxlbWVudFV0aWxpdGllcy5lbGVtZW50VHlwZXMgPSBlbGVtZW50VXRpbGl0aWVzLm5vZGVUeXBlc1xuICAgIC5jb25jYXQoIGVsZW1lbnRVdGlsaXRpZXMuZWRnZVR5cGVzICk7XG5cbiAgLypcbiAgKiBHZXQgc2JnbmNsYXNzIG9mIHRoZSBnaXZlbiBlbGVtZW50LiBJZiB0aGUgcGFyYW1ldGVyIGlzIGEgc3RyaW5nIHJldHVybiBpdFxuICAqIGJ5IGFzc3VtaW5nIHRoYXQgaXQgaXMgdGhlIHNiZ25jbGFzcyBpdHNlbGYuXG4gICovXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0U2JnbkNsYXNzID0gZnVuY3Rpb24oIGVsZSApIHtcbiAgICBpZiAoIGVsZSA9PSBudWxsICkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHNiZ25jbGFzcyA9IHR5cGVvZiBlbGUgPT09ICdzdHJpbmcnID8gZWxlIDogZWxlLmRhdGEoJ2NsYXNzJyk7XG5cbiAgICByZXR1cm4gc2JnbmNsYXNzO1xuICB9O1xuXG4gIC8qXG4gICogR2V0IHNiZ24gY2xhc3Mgb21pdHRpbmcgdGhlIG11bHRpbWVyIGluZm9ybWF0aW9uXG4gICovXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyA9IGZ1bmN0aW9uKCBlbGUgKSB7XG4gICAgaWYgKCBlbGUgPT0gbnVsbCApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldFNiZ25DbGFzcyggZWxlICkucmVwbGFjZSggJyBtdWx0aW1lcicsICcnICk7XG4gIH07XG5cbiAgLypcbiAgICogUmV0dXJucyBpZiB0aGUgZWxlbWVudHMgd2l0aCB0aGUgZ2l2ZW4gcGFyZW50IGNsYXNzIGNhbiBiZSBwYXJlbnQgb2YgdGhlIGVsZW1lbnRzIHdpdGggdGhlIGdpdmVuIG5vZGUgY2xhc3NcbiAgICovXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNWYWxpZFBhcmVudCA9IGZ1bmN0aW9uKF9ub2RlQ2xhc3MsIF9wYXJlbnRDbGFzcywgbm9kZSkge1xuICAgIC8vIElmIG5vZGVDbGFzcyBhbmQgcGFyZW50Q2xhc3MgcGFyYW1zIGFyZSBlbGVtZW50cyBpdHNlbHZlcyBpbnN0ZWFkIG9mIHRoZWlyIGNsYXNzIG5hbWVzIGhhbmRsZSBpdFxuICAgIHZhciBub2RlQ2xhc3MgPSB0eXBlb2YgX25vZGVDbGFzcyAhPT0gJ3N0cmluZycgPyBfbm9kZUNsYXNzLmRhdGEoJ2NsYXNzJykgOiBfbm9kZUNsYXNzO1xuICAgIHZhciBwYXJlbnRDbGFzcyA9IF9wYXJlbnRDbGFzcyAhPSB1bmRlZmluZWQgJiYgdHlwZW9mIF9wYXJlbnRDbGFzcyAhPT0gJ3N0cmluZycgPyBfcGFyZW50Q2xhc3MuZGF0YSgnY2xhc3MnKSA6IF9wYXJlbnRDbGFzcztcblxuICAgIGlmIChwYXJlbnRDbGFzcyA9PSB1bmRlZmluZWQgfHwgcGFyZW50Q2xhc3MgPT09ICdjb21wYXJ0bWVudCdcbiAgICAgICAgICAgIHx8IHBhcmVudENsYXNzID09PSAnc3VibWFwJykgeyAvLyBDb21wYXJ0bWVudHMsIHN1Ym1hcHMgYW5kIHRoZSByb290IGNhbiBpbmNsdWRlIGFueSB0eXBlIG9mIG5vZGVzXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGFyZW50Q2xhc3Muc3RhcnRzV2l0aCgnY29tcGxleCcpICYmICghbm9kZSB8fCBub2RlLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoID09IDAgIC8vIENvbXBsZXhlcyBjYW4gb25seSBpbmNsdWRlIEVQTnMgd2hpY2ggZG8gbm90IGhhdmUgZWRnZXNcbiAgICAgICAgICAgIHx8IGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSA9PSBcIkh5YnJpZEFueVwiIHx8ZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlID09IFwiSHlicmlkU2JnblwiKSkgeyAvLyBXaGVuIG1hcCB0eXBlIGlzIHVua25vd24sIGFsbG93IGNvbXBsZXhlcyB0byBpbmNsdWRlIEVQTnMgd2l0aCBlZGdlc1xuICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuaXNFUE5DbGFzcyhub2RlQ2xhc3MpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTsgLy8gQ3VycmVudGx5IGp1c3QgJ2NvbXBhcnRtZW50JyBhbmQgJ2NvbXBsZXgnIGNvbXBvdW5kcyBhcmUgc3VwcG9ydGVkIHJldHVybiBmYWxzZSBmb3IgYW55IG90aGVyIHBhcmVudENsYXNzXG4gIH07XG5cbiAgLy8gR2V0IGNvbW1vbiBwcm9wZXJ0aWVzIG9mIGdpdmVuIGVsZW1lbnRzLiBSZXR1cm5zIG51bGwgaWYgdGhlIGdpdmVuIGVsZW1lbnQgbGlzdCBpcyBlbXB0eSBvciB0aGVcbiAgLy8gcHJvcGVydHkgaXMgbm90IGNvbW1vbiBmb3IgYWxsIGVsZW1lbnRzLiBkYXRhT3JDc3MgcGFyYW1ldGVyIHNwZWNpZnkgd2hldGhlciB0byBjaGVjayB0aGUgcHJvcGVydHkgb24gZGF0YSBvciBjc3MuXG4gIC8vIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBpdCBpcyBkYXRhLiBJZiBwcm9wZXJ0eU5hbWUgcGFyYW1ldGVyIGlzIGdpdmVuIGFzIGEgZnVuY3Rpb24gaW5zdGVhZCBvZiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlXG4gIC8vIHByb3BlcnR5IG5hbWUgdGhlbiB1c2Ugd2hhdCB0aGF0IGZ1bmN0aW9uIHJldHVybnMuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q29tbW9uUHJvcGVydHkgPSBmdW5jdGlvbiAoZWxlbWVudHMsIHByb3BlcnR5TmFtZSwgZGF0YU9yQ3NzKSB7XG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgaXNGdW5jdGlvbjtcbiAgICAvLyBJZiB3ZSBhcmUgbm90IGNvbXBhcmluZyB0aGUgcHJvcGVydGllcyBkaXJlY3RseSB1c2VycyBjYW4gc3BlY2lmeSBhIGZ1bmN0aW9uIGFzIHdlbGxcbiAgICBpZiAodHlwZW9mIHByb3BlcnR5TmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaXNGdW5jdGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gVXNlIGRhdGEgYXMgZGVmYXVsdFxuICAgIGlmICghaXNGdW5jdGlvbiAmJiAhZGF0YU9yQ3NzKSB7XG4gICAgICBkYXRhT3JDc3MgPSAnZGF0YSc7XG4gICAgfVxuXG4gICAgdmFyIGdldFZhbCA9IGZ1bmN0aW9uKCBpbmRleCApIHtcbiAgICAgICAgdmFyIHZhbCA9IGlzRnVuY3Rpb24gPyBwcm9wZXJ0eU5hbWUoZWxlbWVudHNbaW5kZXhdKSA6IGVsZW1lbnRzW2luZGV4XVtkYXRhT3JDc3NdKHByb3BlcnR5TmFtZSk7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gZ2V0VmFsKCAwICk7XG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIGdldFZhbCggaSApICE9IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIGlmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdHJ1dGh5IHZhbHVlIGZvciBhbGwgb2YgdGhlIGdpdmVuIGVsZW1lbnRzLlxuICBlbGVtZW50VXRpbGl0aWVzLnRydWVGb3JBbGxFbGVtZW50cyA9IGZ1bmN0aW9uIChlbGVtZW50cywgZmNuKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFmY24oZWxlbWVudHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmUgZWxlbWVudCBjYW4gaGF2ZSBzYmduY2FyZGluYWxpdHlcbiAgZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlU0JHTkNhcmRpbmFsaXR5ID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApXG5cbiAgICByZXR1cm4gc2JnbmNsYXNzID09ICdjb25zdW1wdGlvbicgfHwgc2JnbmNsYXNzID09ICdwcm9kdWN0aW9uJztcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmUgZWxlbWVudCBjYW4gaGF2ZSBzYmdubGFiZWxcbiAgZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlU0JHTkxhYmVsID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuXG4gICAgcmV0dXJuIHNiZ25jbGFzcyAhPSAnYW5kJyAmJiBzYmduY2xhc3MgIT0gJ29yJyAmJiBzYmduY2xhc3MgIT0gJ25vdCcgJiYgc2JnbmNsYXNzICE9ICdkZWxheSdcbiAgICAgICAgICAgICYmIHNiZ25jbGFzcyAhPSAnYXNzb2NpYXRpb24nICYmIHNiZ25jbGFzcyAhPSAnZGlzc29jaWF0aW9uJyAmJiBzYmduY2xhc3MgIT0gJ2VtcHR5IHNldCcgJiYgIXNiZ25jbGFzcy5lbmRzV2l0aCgncHJvY2VzcycpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZSBlbGVtZW50IGhhdmUgdW5pdCBvZiBpbmZvcm1hdGlvblxuICBlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVVbml0T2ZJbmZvcm1hdGlvbiA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIGlmIChzYmduY2xhc3MgPT0gJ3NpbXBsZSBjaGVtaWNhbCdcbiAgICAgICAgICAgIHx8IHNiZ25jbGFzcyA9PSAnbWFjcm9tb2xlY3VsZScgfHwgc2JnbmNsYXNzID09ICdudWNsZWljIGFjaWQgZmVhdHVyZSdcbiAgICAgICAgICAgIHx8IHNiZ25jbGFzcyA9PSAnY29tcGxleCcgfHwgc2JnbmNsYXNzID09ICdzaW1wbGUgY2hlbWljYWwgbXVsdGltZXInXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ21hY3JvbW9sZWN1bGUgbXVsdGltZXInIHx8IHNiZ25jbGFzcyA9PSAnbnVjbGVpYyBhY2lkIGZlYXR1cmUgbXVsdGltZXInXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ2NvbXBsZXggbXVsdGltZXInIHx8IChzYmduY2xhc3Muc3RhcnRzV2l0aCgnQkEnKSAmJiBzYmduY2xhc3MgIT0gXCJCQSBwbGFpblwiKVxuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdjb21wYXJ0bWVudCcgfHwgc2JnbmNsYXNzID09ICdTSUYgbWFjcm9tb2xlY3VsZScgfHwgc2JnbmNsYXNzID09ICdTSUYgc2ltcGxlIGNoZW1pY2FsJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSB1bml0cyBvZiBpbmZvcm1hdGlvblxuICBlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVNdWx0aXBsZVVuaXRPZkluZm9ybWF0aW9uID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuICAgIHJldHVybiAhc2JnbmNsYXNzLnN0YXJ0c1dpdGgoJ0JBJyk7XG4gIH07XG5cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmUgZWxlbWVudCBoYXZlIHN0YXRlIHZhcmlhYmxlXG4gIGVsZW1lbnRVdGlsaXRpZXMuY2FuSGF2ZVN0YXRlVmFyaWFibGUgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICBpZiAoc2JnbmNsYXNzID09ICdtYWNyb21vbGVjdWxlJyB8fCBzYmduY2xhc3MgPT0gJ251Y2xlaWMgYWNpZCBmZWF0dXJlJ1xuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdjb21wbGV4J1xuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdtYWNyb21vbGVjdWxlIG11bHRpbWVyJyB8fCBzYmduY2xhc3MgPT0gJ251Y2xlaWMgYWNpZCBmZWF0dXJlIG11bHRpbWVyJ1xuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdjb21wbGV4IG11bHRpbWVyJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIGVsZSBzaG91bGQgYmUgc3F1YXJlIGluIHNoYXBlXG4gIGVsZW1lbnRVdGlsaXRpZXMubXVzdEJlU3F1YXJlID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuXG4gICAgcmV0dXJuIChzYmduY2xhc3MuaW5kZXhPZigncHJvY2VzcycpICE9IC0xIHx8IHNiZ25jbGFzcyA9PSAnZW1wdHkgc2V0J1xuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdhbmQnIHx8IHNiZ25jbGFzcyA9PSAnb3InIHx8IHNiZ25jbGFzcyA9PSAnbm90J1xuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdhc3NvY2lhdGlvbicgfHwgc2JnbmNsYXNzID09ICdkaXNzb2NpYXRpb24nIHx8IHNiZ25jbGFzcyA9PSAnZGVsYXknKTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgYW55IG9mIHRoZSBnaXZlbiBub2RlcyBtdXN0IG5vdCBiZSBpbiBzcXVhcmUgc2hhcGVcbiAgZWxlbWVudFV0aWxpdGllcy5zb21lTXVzdE5vdEJlU3F1YXJlID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGlmICghZWxlbWVudFV0aWxpdGllcy5tdXN0QmVTcXVhcmUobm9kZS5kYXRhKCdjbGFzcycpKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlcyBlbGVtZW50IGNhbiBiZSBjbG9uZWRcbiAgZWxlbWVudFV0aWxpdGllcy5jYW5CZUNsb25lZCA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIHZhciBsaXN0ID0ge1xuICAgICAgJ3Vuc3BlY2lmaWVkIGVudGl0eSc6IHRydWUsXG4gICAgICAnbWFjcm9tb2xlY3VsZSc6IHRydWUsXG4gICAgICAnY29tcGxleCc6IHRydWUsXG4gICAgICAnbnVjbGVpYyBhY2lkIGZlYXR1cmUnOiB0cnVlLFxuICAgICAgJ3NpbXBsZSBjaGVtaWNhbCc6IHRydWUsXG4gICAgICAncGVydHVyYmluZyBhZ2VudCc6IHRydWVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGxpc3Rbc2JnbmNsYXNzXSA/IHRydWUgOiBmYWxzZTtcbiAgfTtcblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVzIGVsZW1lbnQgY2FuIGJlIGNsb25lZFxuICBlbGVtZW50VXRpbGl0aWVzLmNhbkJlTXVsdGltZXIgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICB2YXIgbGlzdCA9IHtcbiAgICAgICdtYWNyb21vbGVjdWxlJzogdHJ1ZSxcbiAgICAgICdjb21wbGV4JzogdHJ1ZSxcbiAgICAgICdudWNsZWljIGFjaWQgZmVhdHVyZSc6IHRydWUsXG4gICAgICAnc2ltcGxlIGNoZW1pY2FsJzogdHJ1ZVxuICAgIH07XG5cbiAgICByZXR1cm4gbGlzdFtzYmduY2xhc3NdID8gdHJ1ZSA6IGZhbHNlO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNCaW9sb2dpY2FsQWN0aXZpdHkgPSBmdW5jdGlvbiggZWxlICkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuXG4gICAgcmV0dXJuIGluQXJyYXkoIHNiZ25jbGFzcywgZWxlbWVudFV0aWxpdGllcy5iaW9sb2dpY2FsQWN0aXZpdHlUeXBlcyApO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZOb2RlID0gZnVuY3Rpb24oIGVsZSApIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcblxuICAgIHJldHVybiBpbkFycmF5KCBzYmduY2xhc3MsIGVsZW1lbnRVdGlsaXRpZXMuc2lmVHlwZXMgKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmlzU0lGRWRnZSA9IGZ1bmN0aW9uKCBlbGUgKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICByZXR1cm4gaW5BcnJheSggc2JnbmNsYXNzLCBlbGVtZW50VXRpbGl0aWVzLnNpZkVkZ2VUeXBlcyApO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNVbmRpcmVjdGVkRWRnZSA9IGZ1bmN0aW9uKCBlbGUgKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICByZXR1cm4gaW5BcnJheSggc2JnbmNsYXNzLCBlbGVtZW50VXRpbGl0aWVzLnVuZGlyZWN0ZWRFZGdlVHlwZXMgKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmlzRGlyZWN0ZWRFZGdlID0gZnVuY3Rpb24oIGVsZSApIHtcbiAgICByZXR1cm4gIWVsZW1lbnRVdGlsaXRpZXMuaXNVbmRpcmVjdGVkRWRnZSggZWxlICk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGFuIEVQTlxuICBlbGVtZW50VXRpbGl0aWVzLmlzRVBOQ2xhc3MgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICByZXR1cm4gaW5BcnJheSggc2JnbmNsYXNzLCBlbGVtZW50VXRpbGl0aWVzLmVwblR5cGVzICk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgUE5cbiAgZWxlbWVudFV0aWxpdGllcy5pc1BOQ2xhc3MgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICByZXR1cm4gaW5BcnJheSggc2JnbmNsYXNzLCBlbGVtZW50VXRpbGl0aWVzLnByb2Nlc3NUeXBlcyApO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2V0aGVyIHRoZSBnaXZlbiBlbGVtZW50IG9yIHN0cmluZyBpcyBvZiB0aGUgc3BlY2lhbCBlbXB0eSBzZXQvZW1wdHkgc2V0IGNsYXNzXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNFbXB0eVNldENsYXNzID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuICAgIHJldHVybiBzYmduY2xhc3MgPT0gJ2VtcHR5IHNldCc7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBnaXZlbiBlbGVtZW50IGlzIGEgbG9naWNhbCBvcGVyYXRvclxuICBlbGVtZW50VXRpbGl0aWVzLmlzTG9naWNhbE9wZXJhdG9yID0gZnVuY3Rpb24oIGVsZSApIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcbiAgICByZXR1cm4gaW5BcnJheSggc2JnbmNsYXNzLCBlbGVtZW50VXRpbGl0aWVzLmxvZ2ljYWxPcGVyYXRvclR5cGVzICk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBjbGFzcyBvZiBnaXZlbiBlbGVtZW50IGlzIGEgZXF1aXZhbGFuY2UgY2xhc3NcbiAgZWxlbWVudFV0aWxpdGllcy5jb252ZW5pZW50VG9FcXVpdmFsZW5jZSA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc2JnbmNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBlbGUgKTtcbiAgICByZXR1cm4gKHNiZ25jbGFzcyA9PSAndGFnJyB8fCBzYmduY2xhc3MgPT0gJ3Rlcm1pbmFsJyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBjbGFzcyBvZiBnaXZlbiBlbGVtZW50IGlzIGEgbW9kdWxhdGlvbiBhcmMgYXMgZGVmaW5lZCBpbiBQRCBzcGVjc1xuICBlbGVtZW50VXRpbGl0aWVzLmlzTW9kdWxhdGlvbkFyY0NsYXNzID0gZnVuY3Rpb24gKGVsZSkge1xuICAgIHZhciBzYmduY2xhc3MgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoIGVsZSApO1xuICAgIHJldHVybiAoc2JnbmNsYXNzID09ICdtb2R1bGF0aW9uJ1xuICAgICAgICAgICAgfHwgc2JnbmNsYXNzID09ICdzdGltdWxhdGlvbicgfHwgc2JnbmNsYXNzID09ICdjYXRhbHlzaXMnXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ2luaGliaXRpb24nIHx8IHNiZ25jbGFzcyA9PSAnbmVjZXNzYXJ5IHN0aW11bGF0aW9uJyk7XG4gIH07XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBjbGFzcyBvZiBnaXZlbiBlbGVtZW50IGlzIGFuIGFyYyBvZiBBRiBzcGVjcyBleGNlcHQgbG9naWNhbCBhcmNcbiAgZWxlbWVudFV0aWxpdGllcy5pc0FGQXJjQ2xhc3MgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG4gICAgcmV0dXJuIChzYmduY2xhc3MgPT0gJ3Bvc2l0aXZlIGluZmx1ZW5jZScgfHwgc2JnbmNsYXNzID09ICduZWdhdGl2ZSBpbmZsdWVuY2UnXG4gICAgICAgICAgICB8fCBzYmduY2xhc3MgPT0gJ3Vua25vd24gaW5mbHVlbmNlJyB8fCBzYmduY2xhc3MgPT0gJ25lY2Vzc2FyeSBzdGltdWxhdGlvbicpO1xuICB9O1xuXG4gIC8vIFJldHVybnMgd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBvciBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiBjbGFzcyBjYW4gaGF2ZSBwb3J0cy5cbiAgZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlUG9ydHMgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG4gICAgcmV0dXJuIHNiZ25jbGFzcyAhPSAncGhlbm90eXBlJyAmJiBzYmduY2xhc3MgIT0gJ2RlbGF5J1xuICAgICAgICAgICAgJiYgKCBlbGVtZW50VXRpbGl0aWVzLmlzTG9naWNhbE9wZXJhdG9yKCBzYmduY2xhc3MgKVxuICAgICAgICAgICAgICAgICAgfHwgZWxlbWVudFV0aWxpdGllcy5pc1BOQ2xhc3MoIHNiZ25jbGFzcyApICk7XG4gIH07XG5cbiAgLy8gU2VjdGlvbiBTdGFydFxuICAvLyBHZW5lcmFsIEVsZW1lbnQgVXRpbGl0aWVzXG5cbiAgLy90aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBub2RlcyBub24gb2Ygd2hvc2UgYW5jZXN0b3JzIGlzIG5vdCBpbiBnaXZlbiBub2Rlc1xuICBlbGVtZW50VXRpbGl0aWVzLmdldFRvcE1vc3ROb2RlcyA9IGZ1bmN0aW9uIChub2Rlcykge1xuICAgICAgdmFyIG5vZGVzTWFwID0ge307XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbm9kZXNNYXBbbm9kZXNbaV0uaWQoKV0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIHJvb3RzID0gbm9kZXMuZmlsdGVyKGZ1bmN0aW9uIChlbGUsIGkpIHtcbiAgICAgICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBlbGUgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlLnBhcmVudCgpWzBdO1xuICAgICAgICAgIHdoaWxlKHBhcmVudCAhPSBudWxsKXtcbiAgICAgICAgICAgIGlmKG5vZGVzTWFwW3BhcmVudC5pZCgpXSl7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQoKVswXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHJvb3RzO1xuICB9O1xuXG4gIC8vVGhpcyBtZXRob2QgY2hlY2tzIGlmIGFsbCBvZiB0aGUgZ2l2ZW4gbm9kZXMgaGF2ZSB0aGUgc2FtZSBwYXJlbnQgYXNzdW1pbmcgdGhhdCB0aGUgc2l6ZVxuICAvL29mICBub2RlcyBpcyBub3QgMFxuICBlbGVtZW50VXRpbGl0aWVzLmFsbEhhdmVUaGVTYW1lUGFyZW50ID0gZnVuY3Rpb24gKG5vZGVzKSB7XG4gICAgICBpZiAobm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwYXJlbnQgPSBub2Rlc1swXS5kYXRhKFwicGFyZW50XCIpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgICAgaWYgKG5vZGUuZGF0YShcInBhcmVudFwiKSAhPSBwYXJlbnQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMubW92ZU5vZGVzID0gZnVuY3Rpb24ocG9zaXRpb25EaWZmLCBub2Rlcywgbm90Q2FsY1RvcE1vc3ROb2Rlcykge1xuICAgIHZhciB0b3BNb3N0Tm9kZXMgPSBub3RDYWxjVG9wTW9zdE5vZGVzID8gbm9kZXMgOiB0aGlzLmdldFRvcE1vc3ROb2Rlcyhub2Rlcyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3BNb3N0Tm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gdG9wTW9zdE5vZGVzW2ldO1xuICAgICAgdmFyIG9sZFggPSBub2RlLnBvc2l0aW9uKFwieFwiKTtcbiAgICAgIHZhciBvbGRZID0gbm9kZS5wb3NpdGlvbihcInlcIik7XG4gICAgICBub2RlLnBvc2l0aW9uKHtcbiAgICAgICAgeDogb2xkWCArIHBvc2l0aW9uRGlmZi54LFxuICAgICAgICB5OiBvbGRZICsgcG9zaXRpb25EaWZmLnlcbiAgICAgIH0pO1xuICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbigpO1xuICAgICAgdGhpcy5tb3ZlTm9kZXMocG9zaXRpb25EaWZmLCBjaGlsZHJlbiwgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuY29udmVydFRvTW9kZWxQb3NpdGlvbiA9IGZ1bmN0aW9uIChyZW5kZXJlZFBvc2l0aW9uKSB7XG4gICAgdmFyIHBhbiA9IGN5LnBhbigpO1xuICAgIHZhciB6b29tID0gY3kuem9vbSgpO1xuXG4gICAgdmFyIHggPSAocmVuZGVyZWRQb3NpdGlvbi54IC0gcGFuLngpIC8gem9vbTtcbiAgICB2YXIgeSA9IChyZW5kZXJlZFBvc2l0aW9uLnkgLSBwYW4ueSkgLyB6b29tO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHgsXG4gICAgICB5OiB5XG4gICAgfTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmNvbnZlcnRUb1JlbmRlcmVkUG9zaXRpb24gPSBmdW5jdGlvbiAobW9kZWxQb3MsIHBhbiwgem9vbSkge1xuICAgIHBhbiA9IHBhbiB8fCBjeS5wYW4oKTtcbiAgICB6b29tID0gem9vbSB8fCBjeS56b29tKCk7XG5cbiAgICB2YXIgcmVzID0ge307XG5cbiAgICBbJ3gnLCAneSddLmZvckVhY2goIGZ1bmN0aW9uKGRpbSkge1xuICAgICAgcmVzW2RpbV0gPSBtb2RlbFBvc1tkaW1dICogem9vbSArIHBhbltkaW1dO1xuICAgIH0gKTtcblxuICAgIHJldHVybiByZXM7XG4gIH07XG5cbiAgLy8gU2VjdGlvbiBFbmRcbiAgLy8gR2VuZXJhbCBFbGVtZW50IFV0aWxpdGllc1xuXG4gIC8vIFNlY3Rpb24gU3RhcnRcbiAgLy8gRWxlbWVudCBGaWx0ZXJpbmcgVXRpbGl0aWVzXG5cbiAgLy8gU0JHTiBzcGVjaWZpYyB1dGlsaXRpZXNcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldFByb2Nlc3Nlc09mU2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc2VsZWN0ZWRFbGVzID0gY3kuZWxlbWVudHMoXCI6c2VsZWN0ZWRcIik7XG4gICAgICBzZWxlY3RlZEVsZXMgPSB0aGlzLmV4dGVuZE5vZGVMaXN0KHNlbGVjdGVkRWxlcyk7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRFbGVzO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0TmVpZ2hib3Vyc09mU2VsZWN0ZWQgPSBmdW5jdGlvbigpe1xuICAgICAgdmFyIHNlbGVjdGVkRWxlcyA9IGN5LmVsZW1lbnRzKFwiOnNlbGVjdGVkXCIpO1xuICAgICAgdmFyIGVsZXNUb0hpZ2hsaWdodCA9IHRoaXMuZ2V0TmVpZ2hib3Vyc09mTm9kZXMoc2VsZWN0ZWRFbGVzKTtcbiAgICAgIHJldHVybiBlbGVzVG9IaWdobGlnaHQ7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXROZWlnaGJvdXJzT2ZOb2RlcyA9IGZ1bmN0aW9uKF9ub2Rlcyl7XG4gICAgICB2YXIgbm9kZXMgPSBfbm9kZXMubm9kZXMoKTsgLy8gRW5zdXJlIHRoYXQgbm9kZXMgbGlzdCBqdXN0IGluY2x1ZGUgbm9kZXNcbiAgICAgIG5vZGVzID0gbm9kZXMuYWRkKG5vZGVzLnBhcmVudHMoXCJub2RlW2NsYXNzXj0nY29tcGxleCddXCIpKTtcbiAgICAgIG5vZGVzID0gbm9kZXMuYWRkKG5vZGVzLmRlc2NlbmRhbnRzKCkpO1xuICAgICAgdmFyIG5laWdoYm9yaG9vZEVsZXMgPSBub2Rlcy5uZWlnaGJvcmhvb2QoKTtcbiAgICAgIHZhciBlbGVzVG9SZXR1cm4gPSBub2Rlcy5hZGQobmVpZ2hib3Job29kRWxlcyk7XG4gICAgICBlbGVzVG9SZXR1cm4gPSBlbGVzVG9SZXR1cm4uYWRkKGVsZXNUb1JldHVybi5kZXNjZW5kYW50cygpKTtcbiAgICAgIHJldHVybiBlbGVzVG9SZXR1cm47XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5leHRlbmROb2RlTGlzdCA9IGZ1bmN0aW9uIChub2Rlc1RvU2hvdykge1xuICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgLy9hZGQgY2hpbGRyZW5cbiAgICAgIG5vZGVzVG9TaG93ID0gbm9kZXNUb1Nob3cuYWRkKG5vZGVzVG9TaG93Lm5vZGVzKCkuZGVzY2VuZGFudHMoKSk7XG4gICAgICAvL2FkZCBwYXJlbnRzXG4gICAgICBub2Rlc1RvU2hvdyA9IG5vZGVzVG9TaG93LmFkZChub2Rlc1RvU2hvdy5wYXJlbnRzKCkpO1xuICAgICAgLy9hZGQgY29tcGxleCBjaGlsZHJlblxuICAgICAgbm9kZXNUb1Nob3cgPSBub2Rlc1RvU2hvdy5hZGQobm9kZXNUb1Nob3cubm9kZXMoXCJub2RlW2NsYXNzXj0nY29tcGxleCddXCIpLmRlc2NlbmRhbnRzKCkpO1xuXG4gICAgICAvLyB2YXIgcHJvY2Vzc2VzID0gbm9kZXNUb1Nob3cubm9kZXMoXCJub2RlW2NsYXNzPSdwcm9jZXNzJ11cIik7XG4gICAgICAvLyB2YXIgbm9uUHJvY2Vzc2VzID0gbm9kZXNUb1Nob3cubm9kZXMoXCJub2RlW2NsYXNzIT0ncHJvY2VzcyddXCIpO1xuICAgICAgLy8gdmFyIG5laWdoYm9yUHJvY2Vzc2VzID0gbm9uUHJvY2Vzc2VzLm5laWdoYm9yaG9vZChcIm5vZGVbY2xhc3M9J3Byb2Nlc3MnXVwiKTtcblxuICAgICAgZXh0ZW5kTm9kZVR5cGVzID0gWydwcm9jZXNzJywgJ29taXR0ZWQgcHJvY2VzcycsICd1bmNlcnRhaW4gcHJvY2VzcycsXG4gICAgICAnYXNzb2NpYXRpb24nLCAnZGlzc29jaWF0aW9uJywgJ3BoZW5vdHlwZScsICdhbmQnLCAnb3InLCAnbm90JywgJ2RlbGF5J107XG5cbiAgICAgIC8vSGVyZSwgbG9naWNhbCBvcGVyYXRvcnMgYXJlIGFsc28gY29uc2lkZXJlZCBhcyBwcm9jZXNzZXMsIHNpbmNlIHRoZXkgYWxzbyBnZXQgaW5wdXRzIGFuZCBvdXRwdXRzXG4gICAgICB2YXIgcHJvY2Vzc2VzID0gbm9kZXNUb1Nob3cuZmlsdGVyKGZ1bmN0aW9uKGVsZSwgaSl7XG4gICAgICAgICAgaWYodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZWxlID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGluQXJyYXkoZWxlLl9wcml2YXRlLmRhdGEuY2xhc3MsIGV4dGVuZE5vZGVUeXBlcyk7XG4gICAgICB9KTtcbiAgICAgIHZhciBub25Qcm9jZXNzZXMgPSBub2Rlc1RvU2hvdy5maWx0ZXIoZnVuY3Rpb24oZWxlLCBpKXtcbiAgICAgICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBlbGUgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gIWluQXJyYXkoZWxlLl9wcml2YXRlLmRhdGEuY2xhc3MsIGV4dGVuZE5vZGVUeXBlcyk7XG4gICAgICB9KTtcbiAgICAgIHZhciBuZWlnaGJvclByb2Nlc3NlcyA9IG5vblByb2Nlc3Nlcy5uZWlnaGJvcmhvb2QoKS51bmlvbihwcm9jZXNzZXMubmVpZ2hib3Job29kKCkpLmZpbHRlcihmdW5jdGlvbihlbGUsIGkpe1xuICAgICAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpbkFycmF5KGVsZS5fcHJpdmF0ZS5kYXRhLmNsYXNzLCBleHRlbmROb2RlVHlwZXMpO1xuICAgICAgfSk7XG4gICAgICAvL0ZvciBBRiBzdXBwb3J0LCBzdWJqZWN0IHRvIGNoYW5nZVxuICAgICAgdmFyIG5laWdoYm9yTm9uUHJvY2Vzc2VzID0gbm9uUHJvY2Vzc2VzLnVuaW9uKG5vblByb2Nlc3Nlcy5uZWlnaGJvcmhvb2QoXCI6aGlkZGVuXCIpKS5maWx0ZXIoZnVuY3Rpb24oZWxlLCBpKXtcbiAgICAgICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBlbGUgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gIWluQXJyYXkoZWxlLl9wcml2YXRlLmRhdGEuY2xhc3MsIGV4dGVuZE5vZGVUeXBlcyk7XG4gICAgICB9KTtcblxuICAgICAgbm9kZXNUb1Nob3cgPSBub2Rlc1RvU2hvdy5hZGQocHJvY2Vzc2VzLm5laWdoYm9yaG9vZCgpKTtcbiAgICAgIG5vZGVzVG9TaG93ID0gbm9kZXNUb1Nob3cuYWRkKG5laWdoYm9yUHJvY2Vzc2VzKTtcbiAgICAgIG5vZGVzVG9TaG93ID0gbm9kZXNUb1Nob3cuYWRkKG5laWdoYm9yUHJvY2Vzc2VzLm5laWdoYm9yaG9vZCgpKTtcbiAgICAgIG5vZGVzVG9TaG93ID0gbm9kZXNUb1Nob3cuYWRkKG5laWdoYm9yTm9uUHJvY2Vzc2VzKTtcblxuICAgICAgbmVpZ2hib3JQcm9jZXNzZXMubmVpZ2hib3Job29kKCkuZm9yRWFjaChmdW5jdGlvbihlbGUpe1xuICAgICAgICAgIGlmKGluQXJyYXkoZWxlLl9wcml2YXRlLmRhdGEuY2xhc3MsIGV4dGVuZE5vZGVUeXBlcykpXG4gICAgICAgICAge1xuICAgICAgICAgICAgIG5vZGVzVG9TaG93ID0gbm9kZXNUb1Nob3cuYWRkKGVsZS5uZWlnaGJvcmhvb2QoKSk7XG4gICAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vYWRkIHBhcmVudHNcbiAgICAgIG5vZGVzVG9TaG93ID0gbm9kZXNUb1Nob3cuYWRkKG5vZGVzVG9TaG93Lm5vZGVzKCkucGFyZW50cygpKTtcbiAgICAgIC8vYWRkIGNoaWxkcmVuXG4gICAgICBub2Rlc1RvU2hvdyA9IG5vZGVzVG9TaG93LmFkZChub2Rlc1RvU2hvdy5ub2RlcyhcIm5vZGVbY2xhc3NePSdjb21wbGV4J11cIikuZGVzY2VuZGFudHMoKSk7XG5cbiAgICAgIHJldHVybiBub2Rlc1RvU2hvdztcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZFJlbWFpbmluZ05vZGVzID0gZnVuY3Rpb24gKG5vZGVzVG9GaWx0ZXIsIGFsbE5vZGVzKSB7XG4gICAgICBub2Rlc1RvRmlsdGVyID0gdGhpcy5leHRlbmROb2RlTGlzdChub2Rlc1RvRmlsdGVyKTtcbiAgICAgIHZhciBub2Rlc1RvU2hvdyA9IGFsbE5vZGVzLm5vdChub2Rlc1RvRmlsdGVyKTtcbiAgICAgIG5vZGVzVG9TaG93ID0gdGhpcy5leHRlbmROb2RlTGlzdChub2Rlc1RvU2hvdyk7XG4gICAgICByZXR1cm4gbm9kZXNUb1Nob3c7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRQcm9jZXNzZXNPZk5vZGVzID0gZnVuY3Rpb24obm9kZXMpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmROb2RlTGlzdChub2Rlcyk7XG4gIH07XG5cbiAgLy8gZ2VuZXJhbCB1dGlsaXRpZXNcblxuICBlbGVtZW50VXRpbGl0aWVzLm5vbmVJc05vdEhpZ2hsaWdodGVkID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2aWV3VXRpbGl0aWVzID0gY3kudmlld1V0aWxpdGllcygnZ2V0Jyk7XG4gICAgdmFyIGhpZ2hsaWdodENsYXNzZXMgPSB2aWV3VXRpbGl0aWVzLmdldEFsbEhpZ2hsaWdodENsYXNzZXMoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhpZ2hsaWdodENsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChjeS4kKCcuJyArIGhpZ2hsaWdodENsYXNzZXNbaV0pLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgLy8gU2VjdGlvbiBFbmRcbiAgLy8gRWxlbWVudCBGaWx0ZXJpbmcgVXRpbGl0aWVzXG5cbiAgLy8gU2VjdGlvbiBTdGFydFxuICAvLyBBZGQgcmVtb3ZlIHV0aWxpdGllc1xuXG4gIC8vIFNCR04gc3BlY2lmaWMgdXRpbGl0aWVzXG5cbiAgZWxlbWVudFV0aWxpdGllcy5kZWxldGVOb2Rlc1NtYXJ0ID0gZnVuY3Rpb24gKF9ub2Rlcykge1xuICAgIHZhciBub2RlcyA9IF9ub2Rlcy5ub2RlcygpOyAvLyBFbnN1cmUgdGhhdCBub2RlcyBsaXN0IGp1c3QgaW5jbHVkZSBub2Rlc1xuXG4gICAgdmFyIGFsbE5vZGVzID0gY3kubm9kZXMoKTtcbiAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gICAgdmFyIG5vZGVzVG9LZWVwID0gdGhpcy5leHRlbmRSZW1haW5pbmdOb2Rlcyhub2RlcywgYWxsTm9kZXMpO1xuICAgIHZhciBub2Rlc05vdFRvS2VlcCA9IGFsbE5vZGVzLm5vdChub2Rlc1RvS2VlcCk7XG4gICAgcmV0dXJuIG5vZGVzTm90VG9LZWVwLnJlbW92ZSgpO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZGVsZXRlRWxlc1NpbXBsZSA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICAgIHJldHVybiBlbGVzLnJlbW92ZSgpO1xuICB9O1xuXG4gIC8vIGdlbmVyYWwgdXRpbGl0aWVzXG5cbiAgZWxlbWVudFV0aWxpdGllcy5yZXN0b3JlRWxlcyA9IGZ1bmN0aW9uIChlbGVzKSB7XG4gICAgICBlbGVzLnJlc3RvcmUoKTtcbiAgICAgIHJldHVybiBlbGVzO1xuICB9O1xuXG4gIC8vIFNlY3Rpb24gRW5kXG4gIC8vIEFkZCByZW1vdmUgdXRpbGl0aWVzXG5cbiAgLy8gU2VjdGlvbiBTdGFydFxuICAvLyBTdHlsZXNoZWV0IGhlbHBlcnNcblxuICAvLyBTQkdOIHNwZWNpZmljIHV0aWxpdGllc1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0QXJyYXlMaW5lU3R5bGUgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIHNiZ25jbGFzcyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0UHVyZVNiZ25DbGFzcyggZWxlICk7XG5cbiAgICBzd2l0Y2ggKHNiZ25jbGFzcykge1xuICAgICAgY2FzZSAnY29udHJvbHMtZXhwcmVzc2lvbi1vZic6IGNhc2UgJ3VwcmVndWxhdGVzLWV4cHJlc3Npb24nOlxuICAgICAgY2FzZSAnZG93bnJlZ3VsYXRlcy1leHByZXNzaW9uJzpcbiAgICAgICAgcmV0dXJuICdkYXNoZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdzb2xpZCc7XG4gICAgfVxuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q3lTaGFwZSA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgIHZhciBfY2xhc3MgPSBlbGUuZGF0YSgnY2xhc3MnKTtcbiAgICAgIC8vIEdldCByaWQgb2YgcmVjdGFuZ2xlIHBvc3RmaXggdG8gaGF2ZSB0aGUgYWN0dWFsIG5vZGUgY2xhc3NcbiAgICAgIGlmIChfY2xhc3MuZW5kc1dpdGgoJyBtdWx0aW1lcicpKSB7XG4gICAgICAgICAgX2NsYXNzID0gX2NsYXNzLnJlcGxhY2UoJyBtdWx0aW1lcicsICcnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jbGFzcyA9PSAnY29tcGFydG1lbnQnKSB7XG4gICAgICAgICAgcmV0dXJuICdjb21wYXJ0bWVudCc7XG4gICAgICB9XG4gICAgICBpZiAoX2NsYXNzID09ICdwaGVub3R5cGUnKSB7XG4gICAgICAgICAgcmV0dXJuICdoZXhhZ29uJztcbiAgICAgIH1cbiAgICAgIGlmIChfY2xhc3MgPT0gJ3BlcnR1cmJpbmcgYWdlbnQnIHx8IF9jbGFzcyA9PSAndGFnJykge1xuICAgICAgICAgIHJldHVybiAncG9seWdvbic7XG4gICAgICB9XG4gICAgICBpZiAoX2NsYXNzID09ICdTSUYgbWFjcm9tb2xlY3VsZScpIHtcbiAgICAgICAgICByZXR1cm4gJ21hY3JvbW9sZWN1bGUnO1xuICAgICAgfVxuICAgICAgaWYgKF9jbGFzcyA9PSAnU0lGIHNpbXBsZSBjaGVtaWNhbCcpIHtcbiAgICAgICAgICByZXR1cm4gJ3NpbXBsZSBjaGVtaWNhbCc7XG4gICAgICB9XG5cbiAgICAgIGlmIChfY2xhc3Muc3RhcnRzV2l0aCgnQkEnKSl7XG4gICAgICAgICAgcmV0dXJuICdiaW9sb2dpY2FsIGFjdGl2aXR5JztcbiAgICAgIH1cblxuICAgICAgaWYgKF9jbGFzcyA9PSAnc3VibWFwJyB8fCBfY2xhc3MgPT0gJ3RvcG9sb2d5IGdyb3VwJyl7XG4gICAgICAgICAgcmV0dXJuICdyZWN0YW5nbGUnO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBuZWVkIHRvIGRlZmluZSBuZXcgbm9kZSBzaGFwZXMgd2l0aCB0aGVpciBjbGFzcyBuYW1lcyBmb3IgdGhlc2Ugbm9kZXNcbiAgICAgIGlmIChfY2xhc3MgPT0gJ2VtcHR5IHNldCcgfHwgX2NsYXNzID09ICdudWNsZWljIGFjaWQgZmVhdHVyZScgfHwgX2NsYXNzID09ICdtYWNyb21vbGVjdWxlJ1xuICAgICAgICAgICAgICB8fCBfY2xhc3MgPT0gJ3NpbXBsZSBjaGVtaWNhbCcgfHwgX2NsYXNzID09ICdjb21wbGV4JyB8fCBfY2xhc3MgPT0gJ2Jpb2xvZ2ljYWwgYWN0aXZpdHknICkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3M7XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZXNlIHNoYXBlcyBjYW4gaGF2ZSBwb3J0cy4gSWYgdGhleSBoYXZlIHBvcnRzIHdlIHJlcHJlc2VudCB0aGVtIGJ5IHBvbHlnb25zLCBlbHNlIHRoZXkgYXJlIHJlcHJlc2VudGVkIGJ5IGVsbGlwc2VzIG9yIHJlY3RhbmdsZXNcbiAgICAgIC8vIGNvbmRpdGlvbmFsbHkuXG4gICAgICBpZiAoIHRoaXMuY2FuSGF2ZVBvcnRzKF9jbGFzcykgKSB7XG5cbiAgICAgICAgaWYgKGdyYXBoVXRpbGl0aWVzLnBvcnRzRW5hYmxlZCA9PT0gdHJ1ZSAmJiBlbGUuZGF0YSgncG9ydHMnKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXR1cm4gJ3BvbHlnb24nOyAvLyBUaGUgbm9kZSBoYXMgcG9ydHMgcmVwcmVzZW50IGl0IGJ5IHBvbHlnb25cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChfY2xhc3MgPT0gJ3Byb2Nlc3MnIHx8IF9jbGFzcyA9PSAnb21pdHRlZCBwcm9jZXNzJyB8fCBfY2xhc3MgPT0gJ3VuY2VydGFpbiBwcm9jZXNzJykge1xuICAgICAgICAgIHJldHVybiAncmVjdGFuZ2xlJzsgLy8gSWYgbm9kZSBoYXMgbm8gcG9ydCBhbmQgaGFzIG9uZSBvZiB0aGVzZSBjbGFzc2VzIGl0IHNob3VsZCBiZSBpbiBhIHJlY3RhbmdsZSBzaGFwZVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICdlbGxpcHNlJzsgLy8gT3RoZXIgbm9kZXMgd2l0aCBubyBwb3J0IHNob3VsZCBiZSBpbiBhbiBlbGxpcHNlIHNoYXBlXG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSByZW1haW5pbmcgbm9kZXMgYXJlIHN1cHBvc2VkIHRvIGJlIGluIGVsbGlwc2Ugc2hhcGVcbiAgICAgIHJldHVybiAnZWxsaXBzZSc7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRDeVRhcmdldEFycm93RmlsbCA9IGZ1bmN0aW9uKGVsZSkge1xuICAgIHZhciBfY2xhc3MgPSBlbGUuZGF0YSgnY2xhc3MnKTtcblxuICAgIGlmICggX2NsYXNzID09ICdpbmhpYml0aW9uJyB8fCBfY2xhc3MgPT0gJ25lZ2F0aXZlIGluZmx1ZW5jZScgfHxcbiAgICAgICAgICBfY2xhc3MgPT0gJ3Byb2R1Y3Rpb24nIHx8IGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZFZGdlKCBfY2xhc3MgKSApIHtcbiAgICAgIHJldHVybiAnZmlsbGVkJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ2hvbGxvdyc7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRDeUFycm93U2hhcGUgPSBmdW5jdGlvbihlbGUpIHtcbiAgICAgIHZhciBfY2xhc3MgPSBlbGUuZGF0YSgnY2xhc3MnKTtcblxuICAgICAgc3dpdGNoICggX2NsYXNzICkge1xuICAgICAgICBjYXNlICduZWNlc3Nhcnkgc3RpbXVsYXRpb24nOlxuICAgICAgICAgIHJldHVybiAndHJpYW5nbGUtY3Jvc3MnO1xuICAgICAgICBjYXNlICdpbmhpYml0aW9uJzogY2FzZSAnbmVnYXRpdmUgaW5mbHVlbmNlJzogY2FzZSAnaW5oaWJpdHMnOlxuICAgICAgICBjYXNlICdkb3ducmVndWxhdGVzLWV4cHJlc3Npb24nOiBjYXNlICdkZXBob3NwaG9yeWxhdGVzJzpcbiAgICAgICAgY2FzZSAnaW5oaWJpdHMtZ3RwYXNlJzogY2FzZSAnZGVhY2V0eWxhdGVzJzogY2FzZSAnZGVtZXRoeWxhdGVzJzpcbiAgICAgICAgICByZXR1cm4gJ3RlZSc7XG4gICAgICAgIGNhc2UgJ2NhdGFseXNpcyc6XG4gICAgICAgICAgcmV0dXJuICdjaXJjbGUnO1xuICAgICAgICBjYXNlICdzdGltdWxhdGlvbic6IGNhc2UgJ3Byb2R1Y3Rpb24nOiBjYXNlICdwb3NpdGl2ZSBpbmZsdWVuY2UnOlxuICAgICAgICBjYXNlICdhY3RpdmF0ZXMnOiBjYXNlICdwaG9zcGhvcnlsYXRlcyc6IGNhc2UgJ3VwcmVndWxhdGVzLWV4cHJlc3Npb24nOlxuICAgICAgICBjYXNlICdjb250cm9scy1zdGF0ZS1jaGFuZ2Utb2YnOiBjYXNlICdjaGVtaWNhbC1hZmZlY3RzJzpcbiAgICAgICAgY2FzZSAnY29udHJvbHMtdHJhbnNwb3J0LW9mJzogY2FzZSAnY29udHJvbHMtcGhvc3Bob3J5bGF0aW9uLW9mJzpcbiAgICAgICAgY2FzZSAnY29udHJvbHMtZXhwcmVzc2lvbi1vZic6IGNhc2UgJ2NhdGFseXNpcy1wcmVjZWRlcyc6XG4gICAgICAgIGNhc2UgJ2NvbnN1bXB0aW9uLWNvbnRyb2xlZC1ieSc6IGNhc2UgJ2NvbnRyb2xzLXByb2R1Y3Rpb24tb2YnOlxuICAgICAgICBjYXNlICdjb250cm9scy10cmFuc3BvcnQtb2YtY2hlbWljYWwnOiBjYXNlICd1c2VkLXRvLXByb2R1Y2UnOlxuICAgICAgICBjYXNlICdhY3RpdmF0ZXMtZ3RwYXNlJzogY2FzZSAnYWNldHlsYXRlcyc6IGNhc2UgJ21ldGh5bGF0ZXMnOlxuICAgICAgICAgIHJldHVybiAndHJpYW5nbGUnO1xuICAgICAgICBjYXNlICdtb2R1bGF0aW9uJzogY2FzZSAndW5rbm93biBpbmZsdWVuY2UnOlxuICAgICAgICAgIHJldHVybiAnZGlhbW9uZCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICdub25lJztcbiAgICAgIH1cbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldEVsZW1lbnRDb250ZW50ID0gZnVuY3Rpb24oZWxlKSB7XG4gICAgICB2YXIgX2NsYXNzID0gZWxlLmRhdGEoJ2NsYXNzJyk7XG5cbiAgICAgIGlmIChfY2xhc3MuZW5kc1dpdGgoJyBtdWx0aW1lcicpKSB7XG4gICAgICAgICAgX2NsYXNzID0gX2NsYXNzLnJlcGxhY2UoJyBtdWx0aW1lcicsICcnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgaWYgKF9jbGFzcyA9PSAnbWFjcm9tb2xlY3VsZScgfHwgX2NsYXNzID09ICdzaW1wbGUgY2hlbWljYWwnXG4gICAgICAgICAgfHwgX2NsYXNzID09ICdwaGVub3R5cGUnXG4gICAgICAgICAgfHwgX2NsYXNzID09ICd1bnNwZWNpZmllZCBlbnRpdHknIHx8IF9jbGFzcyA9PSAnbnVjbGVpYyBhY2lkIGZlYXR1cmUnXG4gICAgICAgICAgfHwgX2NsYXNzID09ICdwZXJ0dXJiaW5nIGFnZW50JyB8fCBfY2xhc3MgPT0gJ3RhZydcbiAgICAgICAgICB8fCBfY2xhc3MgPT0gJ2Jpb2xvZ2ljYWwgYWN0aXZpdHknIHx8IF9jbGFzcy5zdGFydHNXaXRoKCdCQScpXG4gICAgICAgICAgfHwgX2NsYXNzID09ICdzdWJtYXAnIHx8IF9jbGFzcyA9PSAnU0lGIG1hY3JvbW9sZWN1bGUnXG4gICAgICAgICAgfHwgX2NsYXNzID09ICdTSUYgc2ltcGxlIGNoZW1pY2FsJykge1xuICAgICAgICAgIGNvbnRlbnQgPSBlbGUuZGF0YSgnbGFiZWwnKSA/IGVsZS5kYXRhKCdsYWJlbCcpIDogXCJcIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoX2NsYXNzID09ICdjb21wYXJ0bWVudCcpe1xuICAgICAgICAgIGNvbnRlbnQgPSBlbGUuZGF0YSgnbGFiZWwnKSA/IGVsZS5kYXRhKCdsYWJlbCcpIDogXCJcIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoX2NsYXNzID09ICdjb21wbGV4Jyl7XG4gICAgICAgICAgaWYoZWxlLmNoaWxkcmVuKCkubGVuZ3RoID09IDAgfHwgb3B0aW9ucy5zaG93Q29tcGxleE5hbWUpe1xuICAgICAgICAgICAgICBpZihlbGUuZGF0YSgnbGFiZWwnKSl7XG4gICAgICAgICAgICAgICAgICBjb250ZW50ID0gZWxlLmRhdGEoJ2xhYmVsJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZihlbGUuZGF0YSgnaW5mb0xhYmVsJykpe1xuICAgICAgICAgICAgICAgICAgY29udGVudCA9IGVsZS5kYXRhKCdpbmZvTGFiZWwnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgICAgY29udGVudCA9ICcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgIGNvbnRlbnQgPSAnJztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfY2xhc3MgPT0gJ2FuZCcpIHtcbiAgICAgICAgICBjb250ZW50ID0gJ0FORCc7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfY2xhc3MgPT0gJ29yJykge1xuICAgICAgICAgIGNvbnRlbnQgPSAnT1InO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoX2NsYXNzID09ICdub3QnKSB7XG4gICAgICAgICAgY29udGVudCA9ICdOT1QnO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoX2NsYXNzID09ICdvbWl0dGVkIHByb2Nlc3MnKSB7XG4gICAgICAgICAgY29udGVudCA9ICdcXFxcXFxcXCc7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfY2xhc3MgPT0gJ3VuY2VydGFpbiBwcm9jZXNzJykge1xuICAgICAgICAgIGNvbnRlbnQgPSAnPyc7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfY2xhc3MgPT0gJ2Rpc3NvY2lhdGlvbicpIHtcbiAgICAgICAgICBjb250ZW50ID0gJ28nO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoX2NsYXNzID09ICdkZWxheScpe1xuICAgICAgICAgIGNvbnRlbnQgPSAnXFx1MDNDNCc7IC8vIHRhdVxuICAgICAgfVxuXG4gICAgICB2YXIgdGV4dFdpZHRoID0gZWxlLm91dGVyV2lkdGgoKSB8fCBlbGUuZGF0YSgnYmJveCcpLnc7XG5cbiAgICAgIHZhciB0ZXh0UHJvcCA9IHtcbiAgICAgICAgICBsYWJlbDogY29udGVudCxcbiAgICAgICAgICB3aWR0aDogKCBfY2xhc3MgPT0gJ3BlcnR1cmJpbmcgYWdlbnQnID8gdGV4dFdpZHRoIC8gMiA6IHRleHRXaWR0aClcbiAgICAgIH07XG4gICAgICBcbiAgICAgIHJldHVybiB0ZXh0UHJvcC5sYWJlbDtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldExhYmVsVGV4dFNpemUgPSBmdW5jdGlvbiAoZWxlKSB7XG4gICAgdmFyIF9jbGFzcyA9IGVsZS5kYXRhKCdjbGFzcycpO1xuICAgIC8vIFRoZXNlIHR5cGVzIG9mIG5vZGVzIGNhbm5vdCBoYXZlIGxhYmVsIGJ1dCB0aGlzIGlzIHN0YXRlbWVudCBpcyBuZWVkZWQgYXMgYSB3b3JrYXJvdW5kXG4gICAgaWYgKF9jbGFzcyA9PT0gJ2Fzc29jaWF0aW9uJykge1xuICAgICAgcmV0dXJuIDIwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhbkhhdmVQb3J0cyhfY2xhc3MpKSB7XG4gICAgICB2YXIgY29lZmYgPSAxOyAvLyBUaGUgZHluYW1pYyBsYWJlbCBzaXplIGNvZWZmaWNpZW50IGZvciB0aGVzZSBwc2V1ZG8gbGFiZWxzLCBpdCBpcyAxIGZvciBsb2dpY2FsIG9wZXJhdG9yc1xuXG4gICAgICAvLyBDb2VmZiBpcyBzdXBwb3NlZCB0byBiZSAyIGZvciBkaXNzb2NpYXRpb24gYW5kIDEuNSBmb3Igb3RoZXIgcHJvY2Vzc2VzXG4gICAgICBpZiAoX2NsYXNzID09PSAnZGlzc29jaWF0aW9uJykge1xuICAgICAgICBjb2VmZiA9IDI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfY2xhc3MuZW5kc1dpdGgoJ3Byb2Nlc3MnKSkge1xuICAgICAgICBjb2VmZiA9IDEuNTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvcnRzID0gZWxlLmRhdGEoJ3BvcnRzJyk7XG5cbiAgICAgIGlmIChncmFwaFV0aWxpdGllcy5wb3J0c0VuYWJsZWQgPT09IHRydWUgJiYgcG9ydHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBwb3J0cyBhcmUgc3ltbWV0cmljIHRvIHRoZSBub2RlIGNlbnRlciBzbyB1c2luZyBqdXN0IG9uZSBvZiB0aGUgcG9ydHMgaXMgZW5vdWdoXG4gICAgICAgIHZhciBwb3J0ID0gcG9ydHNbMF07XG4gICAgICAgIHZhciBvcmllbnRhdGlvbiA9IHBvcnQueCA9PT0gMCA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICAgIC8vIFRoaXMgaXMgdGhlIHJhdGlvIG9mIHRoZSBhcmVhIG9jY3VwaWVkIHdpdGggcG9ydHMgb3ZlciB3aXRob3V0IHBvcnRzXG4gICAgICAgIHZhciByYXRpbyA9IG9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gTWF0aC5hYnMocG9ydC55KSAvIDUwIDogTWF0aC5hYnMocG9ydC54KSAvIDUwO1xuICAgICAgICBjb2VmZiAvPSByYXRpbzsgLy8gRGl2aWRlIHRoZSBjb2VmZiBieSByYXRpbyB0byBmaXQgaW50byB0aGUgYmJveCBvZiB0aGUgYWN0dWFsIHNoYXBlIChkaXNjbHVkaW5nIHBvcnRzKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5nZXREeW5hbWljTGFiZWxUZXh0U2l6ZShlbGUsIGNvZWZmKTtcbiAgICB9XG5cbiAgICBpZiAoX2NsYXNzID09PSAnZGVsYXknKXtcbiAgICAgIHJldHVybiB0aGlzLmdldER5bmFtaWNMYWJlbFRleHRTaXplKGVsZSwgMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0RHluYW1pY0xhYmVsVGV4dFNpemUoZWxlKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldFN0YXRlVmFyU2hhcGVPcHRpb25zID0gZnVuY3Rpb24oZWxlKSB7XG4gICAgaWYgKCAhZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlU3RhdGVWYXJpYWJsZSggZWxlICkgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gWydzdGFkaXVtJ107XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRVbml0T2ZJbmZvU2hhcGVPcHRpb25zID0gZnVuY3Rpb24oZWxlKSB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50VXRpbGl0aWVzLmdldFB1cmVTYmduQ2xhc3MoZWxlKTtcblxuICAgIGlmICggIWVsZW1lbnRVdGlsaXRpZXMuY2FuSGF2ZVVuaXRPZkluZm9ybWF0aW9uKCB0eXBlICkgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgb3B0cyA9IG51bGw7XG5cbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZOb2RlKCB0eXBlICkgKSB7XG4gICAgICBvcHRzID0gWydyZWN0YW5nbGUnLCAnc3RhZGl1bSddO1xuICAgIH1cbiAgICBlbHNlIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0Jpb2xvZ2ljYWxBY3Rpdml0eSggdHlwZSApICkge1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ0JBIG1hY3JvbW9sZWN1bGUnOlxuICAgICAgICAgIG9wdHMgPSBbJ3JvdW5kcmVjdGFuZ2xlJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0JBIG51Y2xlaWMgYWNpZCBmZWF0dXJlJzpcbiAgICAgICAgICBvcHRzID0gWydib3R0b21yb3VuZHJlY3RhbmdsZSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCQSB1bnNwZWNpZmllZCBlbnRpdHknOlxuICAgICAgICAgIG9wdHMgPSBbJ2VsbGlwc2UnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQkEgY29tcGxleCc6XG4gICAgICAgICAgb3B0cyA9IFsnY29tcGxleCddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCQSBwZXJ0dXJiaW5nIGFnZW50JzpcbiAgICAgICAgICBvcHRzID0gWydwZXJ0dXJiaW5nIGFnZW50J107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0JBIHNpbXBsZSBjaGVtaWNhbCc6XG4gICAgICAgICAgb3B0cyA9IFsnc3RhZGl1bSddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdHMgPSBbJ3JlY3RhbmdsZSddO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRzO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q2FyZGluYWxpdHlEaXN0YW5jZSA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgc3JjUG9zID0gZWxlLnNvdXJjZSgpLnBvc2l0aW9uKCk7XG4gICAgdmFyIHRndFBvcyA9IGVsZS50YXJnZXQoKS5wb3NpdGlvbigpO1xuXG4gICAgdmFyIGRpc3RhbmNlID0gTWF0aC5zcXJ0KE1hdGgucG93KChzcmNQb3MueCAtIHRndFBvcy54KSwgMikgKyBNYXRoLnBvdygoc3JjUG9zLnkgLSB0Z3RQb3MueSksIDIpKTtcbiAgICByZXR1cm4gZGlzdGFuY2UgKiAwLjI1O1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0SW5mb0xhYmVsID0gZnVuY3Rpb24obm9kZSkge1xuICAgIC8qIEluZm8gbGFiZWwgb2YgYSBjb2xsYXBzZWQgbm9kZSBjYW5ub3QgYmUgY2hhbmdlZCBpZlxuICAgICogdGhlIG5vZGUgaXMgY29sbGFwc2VkIHJldHVybiB0aGUgYWxyZWFkeSBleGlzdGluZyBpbmZvIGxhYmVsIG9mIGl0XG4gICAgKi9cbiAgICBpZiAobm9kZS5fcHJpdmF0ZS5kYXRhLmNvbGxhcHNlZENoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBub2RlLl9wcml2YXRlLmRhdGEuaW5mb0xhYmVsO1xuICAgIH1cblxuICAgIC8qXG4gICAgICogSWYgdGhlIG5vZGUgaXMgc2ltcGxlIHRoZW4gaXQncyBpbmZvbGFiZWwgaXMgZXF1YWwgdG8gaXQncyBsYWJlbFxuICAgICAqL1xuICAgIGlmIChub2RlLmNoaWxkcmVuKCkgPT0gbnVsbCB8fCBub2RlLmNoaWxkcmVuKCkubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybiBub2RlLl9wcml2YXRlLmRhdGEubGFiZWw7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbigpO1xuICAgIHZhciBpbmZvTGFiZWwgPSBcIlwiO1xuICAgIC8qXG4gICAgICogR2V0IHRoZSBpbmZvIGxhYmVsIG9mIHRoZSBnaXZlbiBub2RlIGJ5IGl0J3MgY2hpbGRyZW4gaW5mbyByZWN1cnNpdmVseVxuICAgICAqL1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgdmFyIGNoaWxkSW5mbyA9IHRoaXMuZ2V0SW5mb0xhYmVsKGNoaWxkKTtcbiAgICAgIGlmIChjaGlsZEluZm8gPT0gbnVsbCB8fCBjaGlsZEluZm8gPT0gXCJcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluZm9MYWJlbCAhPSBcIlwiKSB7XG4gICAgICAgIGluZm9MYWJlbCArPSBcIjpcIjtcbiAgICAgIH1cbiAgICAgIGluZm9MYWJlbCArPSBjaGlsZEluZm87XG4gICAgfVxuXG4gICAgLy9yZXR1cm4gaW5mbyBsYWJlbFxuICAgIHJldHVybiBpbmZvTGFiZWw7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRRdGlwQ29udGVudCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAvKiBDaGVjayB0aGUgbGFiZWwgb2YgdGhlIG5vZGUgaWYgaXQgaXMgbm90IHZhbGlkXG4gICAgKiB0aGVuIGNoZWNrIHRoZSBpbmZvbGFiZWwgaWYgaXQgaXMgYWxzbyBub3QgdmFsaWQgZG8gbm90IHNob3cgcXRpcFxuICAgICovXG4gICAgdmFyIGxhYmVsID0gbm9kZS5kYXRhKCdsYWJlbCcpO1xuICAgIGlmIChsYWJlbCA9PSBudWxsIHx8IGxhYmVsID09IFwiXCIpIHtcbiAgICAgIGxhYmVsID0gdGhpcy5nZXRJbmZvTGFiZWwobm9kZSk7XG4gICAgfVxuICAgIGlmIChsYWJlbCA9PSBudWxsIHx8IGxhYmVsID09IFwiXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgY29udGVudEh0bWwgPSBcIjxiIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTZweDsnPlwiICsgbGFiZWwgKyBcIjwvYj5cIjtcbiAgICB2YXIgc3RhdGVzYW5kaW5mb3MgPSBub2RlLl9wcml2YXRlLmRhdGEuc3RhdGVzYW5kaW5mb3M7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZXNhbmRpbmZvcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNiZ25zdGF0ZWFuZGluZm8gPSBzdGF0ZXNhbmRpbmZvc1tpXTtcbiAgICAgIGlmIChzYmduc3RhdGVhbmRpbmZvLmNsYXp6ID09IFwic3RhdGUgdmFyaWFibGVcIikge1xuICAgICAgICB2YXIgdmFsdWUgPSBzYmduc3RhdGVhbmRpbmZvLnN0YXRlLnZhbHVlO1xuICAgICAgICB2YXIgdmFyaWFibGUgPSBzYmduc3RhdGVhbmRpbmZvLnN0YXRlLnZhcmlhYmxlO1xuICAgICAgICB2YXIgc3RhdGVMYWJlbCA9ICh2YXJpYWJsZSA9PSBudWxsIC8qfHwgdHlwZW9mIHN0YXRlVmFyaWFibGUgPT09IHVuZGVmaW5lZCAqLykgPyB2YWx1ZSA6XG4gICAgICAgICAgICAgICAgdmFsdWUgKyBcIkBcIiArIHZhcmlhYmxlO1xuICAgICAgICBpZiAoc3RhdGVMYWJlbCA9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGVMYWJlbCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudEh0bWwgKz0gXCI8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTRweDsnPlwiICsgc3RhdGVMYWJlbCArIFwiPC9kaXY+XCI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChzYmduc3RhdGVhbmRpbmZvLmNsYXp6ID09IFwidW5pdCBvZiBpbmZvcm1hdGlvblwiKSB7XG4gICAgICAgIHZhciBzdGF0ZUxhYmVsID0gc2JnbnN0YXRlYW5kaW5mby5sYWJlbC50ZXh0O1xuICAgICAgICBpZiAoc3RhdGVMYWJlbCA9PSBudWxsKSB7XG4gICAgICAgICAgc3RhdGVMYWJlbCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudEh0bWwgKz0gXCI8ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjtmb250LXNpemU6MTRweDsnPlwiICsgc3RhdGVMYWJlbCArIFwiPC9kaXY+XCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb250ZW50SHRtbDtcbiAgfTtcblxuICAvLyBnZW5lcmFsIHV0aWxpdGllc1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0RHluYW1pY0xhYmVsU2l6ZUNvZWZmaWNpZW50ID0gZnVuY3Rpb24oIGR5bmFtaWNMYWJlbFNpemUgKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgICdzbWFsbCc6IDAuNzUsXG4gICAgICAncmVndWxhcic6IDEsXG4gICAgICAnbGFyZ2UnOiAxLjI1XG4gICAgfTtcblxuICAgIHJldHVybiBtYXBbIGR5bmFtaWNMYWJlbFNpemUgXTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmdldER5bmFtaWNMYWJlbFRleHRTaXplID0gZnVuY3Rpb24gKGVsZSwgZHluYW1pY0xhYmVsU2l6ZUNvZWZmaWNpZW50KSB7XG4gICAgdmFyIHNiZ25jbGFzcywgaDtcblxuICAgIC8vIGVsZSBjYW4gZWl0aGVyIGJlIG5vZGUgaXRzZWxmIG9yIGFuIG9iamVjdCB0aGF0IGhhcyBjbGFzcyBhbmQgaGVpZ2h0IGZpZWxkc1xuICAgIGlmICggZWxlLmlzTm9kZSAmJiBlbGUuaXNOb2RlKCkgKSB7XG4gICAgICBzYmduY2xhc3MgPSBlbGUuZGF0YSggJ2NsYXNzJyApO1xuICAgICAgaCA9IGVsZS5oZWlnaHQoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzYmduY2xhc3MgPSBlbGVbICdjbGFzcycgXTtcbiAgICAgIGggPSBlbGVbICdoZWlnaHQnIF07XG4gICAgfVxuXG4gICAgdmFyIGR5bmFtaWNMYWJlbFNpemUgPSBvcHRpb25zLmR5bmFtaWNMYWJlbFNpemU7XG4gICAgZHluYW1pY0xhYmVsU2l6ZSA9IHR5cGVvZiBkeW5hbWljTGFiZWxTaXplID09PSAnZnVuY3Rpb24nID8gZHluYW1pY0xhYmVsU2l6ZS5jYWxsKCkgOiBkeW5hbWljTGFiZWxTaXplO1xuXG4gICAgaWYgKGR5bmFtaWNMYWJlbFNpemVDb2VmZmljaWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZHluYW1pY0xhYmVsU2l6ZSA9PSAnc21hbGwnKSB7XG4gICAgICAgIGlmIChzYmduY2xhc3Muc3RhcnRzV2l0aChcImNvbXBsZXhcIikpXG4gICAgICAgICAgcmV0dXJuIDEwO1xuICAgICAgICBlbHNlIGlmIChzYmduY2xhc3MgPT0gXCJjb21wYXJ0bWVudFwiIHx8IHNiZ25jbGFzcyA9PSBcInN1Ym1hcFwiKVxuICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGR5bmFtaWNMYWJlbFNpemUgPT0gJ3JlZ3VsYXInKSB7XG4gICAgICAgIGlmIChzYmduY2xhc3Muc3RhcnRzV2l0aChcImNvbXBsZXhcIikpXG4gICAgICAgICAgcmV0dXJuIDExO1xuICAgICAgICBlbHNlIGlmIChzYmduY2xhc3MgPT0gXCJjb21wYXJ0bWVudFwiIHx8IHNiZ25jbGFzcyA9PSBcInN1Ym1hcFwiKVxuICAgICAgICAgIHJldHVybiAxNDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGR5bmFtaWNMYWJlbFNpemUgPT0gJ2xhcmdlJykge1xuICAgICAgICBpZiAoc2JnbmNsYXNzLnN0YXJ0c1dpdGgoXCJjb21wbGV4XCIpKVxuICAgICAgICAgIHJldHVybiAxMjtcbiAgICAgICAgZWxzZSBpZiAoc2JnbmNsYXNzID09IFwiY29tcGFydG1lbnRcIiB8fCBzYmduY2xhc3MgPT0gXCJzdWJtYXBcIilcbiAgICAgICAgICByZXR1cm4gMTY7XG4gICAgICB9XG5cbiAgICAgIGR5bmFtaWNMYWJlbFNpemVDb2VmZmljaWVudCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RHluYW1pY0xhYmVsU2l6ZUNvZWZmaWNpZW50KCBkeW5hbWljTGFiZWxTaXplICk7XG4gICAgfVxuXG4gICAgdmFyIHRleHRIZWlnaHQgPSBwYXJzZUludChoIC8gMi40NSkgKiBkeW5hbWljTGFiZWxTaXplQ29lZmZpY2llbnQ7XG5cbiAgICByZXR1cm4gdGV4dEhlaWdodDtcbiAgfTtcblxuICAvKlxuICAqIEdldCBzb3VyY2UvdGFyZ2V0IGVuZCBwb2ludCBvZiBlZGdlIGluICd4LXZhbHVlJSB5LXZhbHVlJScgZm9ybWF0LiBJdCByZXR1cm5zICdvdXRzaWRlLXRvLW5vZGUnIGlmIHRoZXJlIGlzIG5vIHNvdXJjZS90YXJnZXQgcG9ydC5cbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRFbmRQb2ludCA9IGZ1bmN0aW9uKGVkZ2UsIHNvdXJjZU9yVGFyZ2V0KSB7XG4gICAgdmFyIHBvcnRJZCA9IHNvdXJjZU9yVGFyZ2V0ID09PSAnc291cmNlJyA/IGVkZ2UuZGF0YSgncG9ydHNvdXJjZScpIDogZWRnZS5kYXRhKCdwb3J0dGFyZ2V0Jyk7XG5cbiAgICBpZiAocG9ydElkID09IG51bGwgfHwgIWdyYXBoVXRpbGl0aWVzLnBvcnRzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuICdvdXRzaWRlLXRvLW5vZGUnOyAvLyBJZiB0aGVyZSBpcyBubyBwb3J0c291cmNlIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSB3aGljaCBpcyAnb3V0c2lkZS10by1ub2RlJ1xuICAgIH1cblxuICAgIHZhciBlbmROb2RlID0gc291cmNlT3JUYXJnZXQgPT09ICdzb3VyY2UnID8gZWRnZS5zb3VyY2UoKSA6IGVkZ2UudGFyZ2V0KCk7XG4gICAgdmFyIHBvcnRzID0gZW5kTm9kZS5kYXRhKCdwb3J0cycpO1xuICAgIHZhciBwb3J0O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcG9ydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChwb3J0c1tpXS5pZCA9PT0gcG9ydElkKSB7XG4gICAgICAgIHBvcnQgPSBwb3J0c1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9ydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJ291dHNpZGUtdG8tbm9kZSc7IC8vIElmIHBvcnQgaXMgbm90IGZvdW5kIHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZSB3aGljaCBpcyAnb3V0c2lkZS10by1ub2RlJ1xuICAgIH1cblxuICAgIHZhciB4LCB5O1xuICAgIC8vIE5vdGUgdGhhdCBmb3IgZHJhd2luZyBwb3J0cyB3ZSByZXByZXNlbnQgdGhlIHdob2xlIHNoYXBlIGJ5IGEgcG9seWdvbiBhbmQgcG9ydHMgYXJlIGFsd2F5cyA1MCUgYXdheSBmcm9tIHRoZSBub2RlIGNlbnRlclxuICAgIGlmIChwb3J0LnggIT0gMCkge1xuICAgICAgeCA9IE1hdGguc2lnbihwb3J0LngpICogNTA7XG4gICAgICB5ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB4ID0gMDtcbiAgICAgIHkgPSBNYXRoLnNpZ24ocG9ydC55KSAqIDUwO1xuICAgIH1cblxuICAgIHJldHVybiAnJyArIHggKyAnJSAnICsgeSArICclJztcbiAgfTtcblxuICAvKlxuICAgKiBSZXR1cm4gb3JkZXJpbmcgb2YgcG9ydHMgb2YgYSBub2RlLlxuICAgKiBQb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFyZSAnTC10by1SJywgJ1ItdG8tTCcsICdULXRvLUInLCAnQi10by1UJywgJ25vbmUnXG4gICAqL1xuICBlbGVtZW50VXRpbGl0aWVzLmdldFBvcnRzT3JkZXJpbmcgPSBmdW5jdGlvbihub2RlKSB7XG4gICAvLyBSZXR1cm4gdGhlIGNhY2hlZCBwb3J0c29yZGVyaW5nIGlmIGV4aXN0c1xuICAgaWYgKG5vZGUuZGF0YSgncG9ydHNvcmRlcmluZycpKSB7XG4gICAgIHJldHVybiBub2RlLmRhdGEoJ3BvcnRzb3JkZXJpbmcnKTtcbiAgIH1cblxuICAgdmFyIHBvcnRzID0gbm9kZS5kYXRhKCdwb3J0cycpO1xuICAgaWYgKHBvcnRzLmxlbmd0aCAhPT0gMikge1xuICAgICBub2RlLmRhdGEoJ3BvcnRzb3JkZXJpbmcnLCAnbm9uZScpOyAvLyBDYWNoZSB0aGUgcG9ydHMgb3JkZXJpbmdcbiAgICAgcmV0dXJuICdub25lJzsgLy8gTm9kZXMgYXJlIHN1cHBvc2VkIHRvIGhhdmUgMiBub2RlcyBvciBub25lXG4gICB9XG5cbiAgIC8qXG4gICAgKiBSZXR1cnNuIGlmIHRoZSBnaXZlbiBwb3J0SWQgaXMgcG9ydHRhcmdldCBvZiBhbnkgb2YgdGhlIGdpdmVuIGVkZ2VzLlxuICAgICogVGhlc2UgZWRnZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgcG9ydC5cbiAgICAqL1xuICAgdmFyIGlzUG9ydFRhcmdldE9mQW55RWRnZSA9IGZ1bmN0aW9uKGVkZ2VzLCBwb3J0SWQpIHtcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgIGlmIChlZGdlc1tpXS5kYXRhKCdwb3J0dGFyZ2V0JykgPT09IHBvcnRJZCkge1xuICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgfVxuICAgICB9XG5cbiAgICAgcmV0dXJuIGZhbHNlO1xuICAgfTtcblxuICAgLy8gSWYgdGhlIHBvcnRzIGFyZSBsb2NhdGVkIGFib3ZlL2JlbG93IG9mIHRoZSBub2RlIHRoZW4gdGhlIG9yaWVudGF0aW9uIGlzICd2ZXJ0aWNhbCcgZWxzZSBpdCBpcyAnaG9yaXpvbnRhbCcuXG4gICB2YXIgb3JpZW50YXRpb24gPSBwb3J0c1swXS54ID09PSAwID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgIC8vIFdlIG5lZWQgdGhlIGNvbm5lY3RlZCBlZGdlcyBvZiB0aGUgbm9kZSB0byBmaW5kIG91dCBpZiBhIHBvcnQgaXMgYW4gaW5wdXQgcG9ydCBvciBhbiBvdXRwdXQgcG9ydFxuICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpO1xuXG4gICB2YXIgcG9ydHNvcmRlcmluZztcbiAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgIHZhciBsZWZ0UG9ydElkID0gcG9ydHNbMF0ueCA8IDAgPyBwb3J0c1swXS5pZCA6IHBvcnRzWzFdLmlkOyAvLyBMZWZ0IHBvcnQgaXMgdGhlIHBvcnQgd2hvc2UgeCB2YWx1ZSBpcyBuZWdhdGl2ZVxuICAgICAvLyBJZiBsZWZ0IHBvcnQgaXMgcG9ydCB0YXJnZXQgZm9yIGFueSBvZiBjb25uZWN0ZWQgZWRnZXMgdGhlbiB0aGUgb3JkZXJpbmcgaXMgJ0wtdG8tUicgZWxzZSBpdCBpcyAnUi10by1MJ1xuICAgICBpZiAoaXNQb3J0VGFyZ2V0T2ZBbnlFZGdlKGNvbm5lY3RlZEVkZ2VzLCBsZWZ0UG9ydElkKSkge1xuICAgICAgIHBvcnRzb3JkZXJpbmcgPSAnTC10by1SJztcbiAgICAgfVxuICAgICBlbHNlIHtcbiAgICAgICBwb3J0c29yZGVyaW5nID0gJ1ItdG8tTCc7XG4gICAgIH1cbiAgIH1cbiAgIGVsc2Uge1xuICAgICB2YXIgdG9wUG9ydElkID0gcG9ydHNbMF0ueSA8IDAgPyBwb3J0c1swXS5pZCA6IHBvcnRzWzFdLmlkOyAvLyBUb3AgcG9ydCBpcyB0aGUgcG9ydCB3aG9zZSB5IHZhbHVlIGlzIG5lZ2F0aXZlXG4gICAgIC8vIElmIHRvcCAgcG9ydCBpcyBwb3J0IHRhcmdldCBmb3IgYW55IG9mIGNvbm5lY3RlZCBlZGdlcyB0aGVuIHRoZSBvcmRlcmluZyBpcyAnVC10by1CJyBlbHNlIGl0IGlzICdCLXRvLVQnXG4gICAgIGlmIChpc1BvcnRUYXJnZXRPZkFueUVkZ2UoY29ubmVjdGVkRWRnZXMsIHRvcFBvcnRJZCkpIHtcbiAgICAgICBwb3J0c29yZGVyaW5nID0gJ1QtdG8tQic7XG4gICAgIH1cbiAgICAgZWxzZSB7XG4gICAgICAgcG9ydHNvcmRlcmluZyA9ICdCLXRvLVQnO1xuICAgICB9XG4gICB9XG5cbiAgIC8vIENhY2hlIHRoZSBwb3J0c29yZGVyaW5nIGFuZCByZXR1cm4gaXQuXG4gICBub2RlLmRhdGEoJ3BvcnRzb3JkZXJpbmcnLCBwb3J0c29yZGVyaW5nKTtcbiAgIHJldHVybiBwb3J0c29yZGVyaW5nO1xuICB9O1xuXG4gIC8qXG4gICogU2V0cyB0aGUgb3JkZXJpbmcgb2YgdGhlIGdpdmVuIG5vZGVzLlxuICAqIE9yZGVyaW5nIG9wdGlvbnMgYXJlICdMLXRvLVInLCAnUi10by1MJywgJ1QtdG8tQicsICdCLXRvLVQnLCAnbm9uZScuXG4gICogSWYgYSBub2RlIGRvZXMgbm90IGhhdmUgYW55IHBvcnQgYmVmb3JlIHRoZSBvcGVyYXRpb24gYW5kIGl0IGlzIHN1cHBvc2VkIHRvIGhhdmUgc29tZSBhZnRlciBvcGVyYXRpb24gdGhlIHBvcnREaXN0YW5jZSBwYXJhbWV0ZXIgaXNcbiAgKiB1c2VkIHRvIHNldCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbm9kZSBjZW50ZXIgYW5kIHRoZSBwb3J0cy4gVGhlIGRlZmF1bHQgcG9ydCBkaXN0YW5jZSBpcyA2MC5cbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nID0gZnVuY3Rpb24oIG5vZGVzLCBvcmRlcmluZywgcG9ydERpc3RhbmNlICkge1xuICAgIC8qXG4gICAgKiBSZXR1cm5zIGlmIHRoZSBnaXZlbiBwb3J0SWQgaXMgcG9ydHRhcmdldCBvZiBhbnkgb2YgdGhlIGdpdmVuIGVkZ2VzLlxuICAgICogVGhlc2UgZWRnZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoYXQgcG9ydC5cbiAgICAqL1xuICAgIHZhciBpc1BvcnRUYXJnZXRPZkFueUVkZ2UgPSBmdW5jdGlvbihlZGdlcywgcG9ydElkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChlZGdlc1tpXS5kYXRhKCdwb3J0dGFyZ2V0JykgPT09IHBvcnRJZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG5cbiAgICAvKlxuICAgICogUmV0dXJucyBpZiB0aGUgZ2l2ZW4gcG9ydElkIGlzIHBvcnRzb3VyY2Ugb2YgYW55IG9mIHRoZSBnaXZlbiBlZGdlcy5cbiAgICAqIFRoZXNlIGVkZ2VzIGFyZSBleHBlY3RlZCB0byBiZSB0aGUgZWRnZXMgY29ubmVjdGVkIHRvIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGF0IHBvcnQuXG4gICAgKi9cbiAgICB2YXIgaXNQb3J0U291cmNlT2ZBbnlFZGdlID0gZnVuY3Rpb24oZWRnZXMsIHBvcnRJZCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlZGdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZWRnZXNbaV0uZGF0YSgncG9ydHNvdXJjZScpID09PSBwb3J0SWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIHBvcnREaXN0YW5jZSA9IHBvcnREaXN0YW5jZSA/IHBvcnREaXN0YW5jZSA6IDcwOyAvLyBUaGUgZGVmYXVsdCBwb3J0IGRpc3RhbmNlIGlzIDYwXG5cbiAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKyApIHtcbiAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICB2YXIgY3VycmVudE9yZGVyaW5nID0gdGhpcy5nZXRQb3J0c09yZGVyaW5nKG5vZGUpOyAvLyBUaGUgY3VycmVudCBwb3J0cyBvcmRlcmluZyBvZiB0aGUgbm9kZVxuXG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBvcmRlcmluZyBpcyBhbHJlYWR5IGVxdWFsIHRvIHRoZSBkZXNpcmVkIG9yZGVyaW5nIHBhc3MgdGhpcyBub2RlIGRpcmVjdGx5XG4gICAgICBpZiAoIG9yZGVyaW5nID09PSBjdXJyZW50T3JkZXJpbmcgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIG9yZGVyaW5nID09PSAnbm9uZScgKSB7IC8vIElmIHRoZSBvcmRlcmluZyBpcyAnbm9uZScgcmVtb3ZlIHRoZSBwb3J0cyBvZiB0aGUgbm9kZVxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnJlbW92ZVBvcnRzKG5vZGUpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIGN1cnJlbnRPcmRlcmluZyA9PT0gJ25vbmUnICkgeyAvLyBJZiB0aGUgZGVzaXJlZCBvcmRlcmluZyBpcyBub3QgJ25vbmUnIGJ1dCB0aGUgY3VycmVudCBvbmUgaXMgJ25vbmUnIGFkZCBwb3J0cyB3aXRoIHRoZSBnaXZlbiBwYXJhbWV0ZXJzLlxuICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFBvcnRzKG5vZGUsIG9yZGVyaW5nLCBwb3J0RGlzdGFuY2UpO1xuICAgICAgfVxuICAgICAgZWxzZSB7IC8vIEVsc2UgY2hhbmdlIHRoZSBvcmRlcmluZyBieSBhbHRlcmluZyBub2RlICdwb3J0cydcbiAgICAgICAgdmFyIHBvcnRzID0gbm9kZS5kYXRhKCdwb3J0cycpOyAvLyBQb3J0cyBvZiB0aGUgbm9kZVxuICAgICAgICAvLyBJZiBjdXJyZW50T3JkZXJpbmcgaXMgJ25vbmUnIHVzZSB0aGUgcG9ydERpc3RhbmNlIGdpdmVuIGJ5IHBhcmFtZXRlciBlbHNlIHVzZSB0aGUgZXhpc3Rpbmcgb25lXG4gICAgICAgIHZhciBkaXN0ID0gY3VycmVudE9yZGVyaW5nID09PSAnbm9uZScgPyBwb3J0RGlzdGFuY2UgOiAoIE1hdGguYWJzKCBwb3J0c1swXS54ICkgfHwgTWF0aC5hYnMoIHBvcnRzWzBdLnkgKSApO1xuICAgICAgICB2YXIgY29ubmVjdGVkRWRnZXMgPSBub2RlLmNvbm5lY3RlZEVkZ2VzKCk7IC8vIFRoZSBlZGdlcyBjb25uZWN0ZWQgdG8gdGhlIG5vZGVcbiAgICAgICAgdmFyIHBvcnRzb3VyY2UsIHBvcnR0YXJnZXQ7IC8vIFRoZSBwb3J0cyB3aGljaCBhcmUgcG9ydHNvdXJjZS9wb3J0dGFyZ2V0IG9mIHRoZSBjb25uZWN0ZWQgZWRnZXNcblxuICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHBvcnRzb3VyY2UgYW5kIHBvcnR0YXJnZXRcbiAgICAgICAgaWYgKCBpc1BvcnRUYXJnZXRPZkFueUVkZ2UoY29ubmVjdGVkRWRnZXMsIHBvcnRzWzBdLmlkKSB8fCBpc1BvcnRTb3VyY2VPZkFueUVkZ2UoY29ubmVjdGVkRWRnZXMsIHBvcnRzWzFdLmlkKSApIHtcbiAgICAgICAgICBwb3J0dGFyZ2V0ID0gcG9ydHNbMF07XG4gICAgICAgICAgcG9ydHNvdXJjZSA9IHBvcnRzWzFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHBvcnR0YXJnZXQgPSBwb3J0c1sxXTtcbiAgICAgICAgICBwb3J0c291cmNlID0gcG9ydHNbMF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIG9yZGVyaW5nID09PSAnTC10by1SJyApIHtcbiAgICAgICAgICAvLyBJZiBvcmRlcmluZyBpcyAnTC10by1SJyB0aGUgcG9ydHRhcmdldCBzaG91bGQgYmUgdGhlIGxlZnQgbW9zdCBwb3J0IGFuZCB0aGUgcG9ydHNvdXJjZSBzaG91bGQgYmUgdGhlIHJpZ2h0IG1vc3QgcG9ydFxuICAgICAgICAgIHBvcnR0YXJnZXQueCA9IC0xICogZGlzdDtcbiAgICAgICAgICBwb3J0c291cmNlLnggPSBkaXN0O1xuICAgICAgICAgIHBvcnR0YXJnZXQueSA9IDA7XG4gICAgICAgICAgcG9ydHNvdXJjZS55ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICggb3JkZXJpbmcgPT09ICdSLXRvLUwnICkge1xuICAgICAgICAgIC8vIElmIG9yZGVyaW5nIGlzICdSLXRvLUwnIHRoZSBwb3J0dGFyZ2V0IHNob3VsZCBiZSB0aGUgcmlnaHQgbW9zdCBwb3J0IGFuZCB0aGUgcG9ydHNvdXJjZSBzaG91bGQgYmUgdGhlIGxlZnQgbW9zdCBwb3J0XG4gICAgICAgICAgcG9ydHRhcmdldC54ID0gZGlzdDtcbiAgICAgICAgICBwb3J0c291cmNlLnggPSAtMSAqIGRpc3Q7XG4gICAgICAgICAgcG9ydHRhcmdldC55ID0gMDtcbiAgICAgICAgICBwb3J0c291cmNlLnkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCBvcmRlcmluZyA9PT0gJ1QtdG8tQicgKSB7XG4gICAgICAgICAgLy8gSWYgb3JkZXJpbmcgaXMgJ1QtdG8tQicgdGhlIHBvcnR0YXJnZXQgc2hvdWxkIGJlIHRoZSB0b3AgbW9zdCBwb3J0IGFuZCB0aGUgcG9ydHNvdXJjZSBzaG91bGQgYmUgdGhlIGJvdHRvbSBtb3N0IHBvcnRcbiAgICAgICAgICBwb3J0dGFyZ2V0LnggPSAwO1xuICAgICAgICAgIHBvcnRzb3VyY2UueCA9IDA7XG4gICAgICAgICAgcG9ydHRhcmdldC55ID0gLTEgKiBkaXN0O1xuICAgICAgICAgIHBvcnRzb3VyY2UueSA9IGRpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSAgeyAvL2lmIG9yZGVyaW5nIGlzICdCLXRvLVQnXG4gICAgICAgICAgLy8gSWYgb3JkZXJpbmcgaXMgJ0ItdG8tVCcgdGhlIHBvcnR0YXJnZXQgc2hvdWxkIGJlIHRoZSBib3R0b20gbW9zdCBwb3J0IGFuZCB0aGUgcG9ydHNvdXJjZSBzaG91bGQgYmUgdGhlIHRvcCBtb3N0IHBvcnRcbiAgICAgICAgICBwb3J0dGFyZ2V0LnggPSAwO1xuICAgICAgICAgIHBvcnRzb3VyY2UueCA9IDA7XG4gICAgICAgICAgcG9ydHRhcmdldC55ID0gZGlzdDtcbiAgICAgICAgICBwb3J0c291cmNlLnkgPSAtMSAqIGRpc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZS5kYXRhKCdwb3J0cycsIHBvcnRzKTsgLy8gUmVzZXQgdGhlIG5vZGUgcG9ydHNcbiAgICB9XG5cbiAgICBub2Rlcy5kYXRhKCdwb3J0c29yZGVyaW5nJywgb3JkZXJpbmcpOyAvLyBVcGRhdGUgdGhlIGNhY2hlZCBvcmRlcmluZ3Mgb2YgdGhlIG5vZGVzXG4gICAgY3kuZW5kQmF0Y2goKTtcbiAgfTtcblxuICAvKlxuICAqIEFkZCBwb3J0cyB0byB0aGUgZ2l2ZW4gbm9kZSwgd2l0aCBnaXZlbiBvcmRlcmluZyBhbmQgcG9ydCBkaXN0YW5jZS5cbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5hZGRQb3J0cyA9IGZ1bmN0aW9uKG5vZGUsIG9yZGVyaW5nLCBwb3J0RGlzdGFuY2UpIHtcbiAgICB2YXIgZmlyc3RQb3J0SWQgPSBub2RlLmlkKCkgKyBcIi4xXCI7IC8vIElkIG9mIGZpcnN0IHBvcnRcbiAgICB2YXIgc2Vjb25kUG9ydElkID0gbm9kZS5pZCgpICsgXCIuMlwiOyAvLyBJZCBvZiBzZWNvbmYgcG9ydFxuICAgIC8vIEZpcnN0IHBvcnQgb2JqZWN0IHggYW5kIHkgd2lsbCBiZSBmaWxsZWQgYWNjb3JkaW5nIHRvIG9yZGVyaW5nLCB0aGUgZmlyc3QgcG9ydCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgbGVmdCBtb3N0IG9yIHRoZSB0b3AgbW9zdCBvbmVcbiAgICB2YXIgZmlyc3RQb3J0ID0geyBpZDogZmlyc3RQb3J0SWQgfTtcbiAgICAvLyBTZWNvbmQgcG9ydCBvYmplY3QgeCBhbmQgeSB3aWxsIGJlIGZpbGxlZCBhY2NvcmRpbmcgdG8gb3JkZXJpbmcsIHRoZSBzZWNvbmQgcG9ydCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgcmlnaHQgbW9zdCBvciB0aGUgYm90dG9tIG1vc3Qgb25lXG4gICAgdmFyIHNlY29uZFBvcnQgPSB7IGlkOiBzZWNvbmRQb3J0SWQgfTtcblxuICAgIC8vIENvbXBsZXRlIHBvcnQgb2JqZWN0cyBhY2NvcmRpbmcgdG8gb3JkZXJpbmdcbiAgICBpZiAoIG9yZGVyaW5nID09PSAnTC10by1SJyB8fCBvcmRlcmluZyA9PT0gJ1ItdG8tTCcgKSB7XG4gICAgICAvLyBJZiBvcmRlcmluZyBpcyBpbiBob3Jpem9udGFsIGF4aXMgZmlyc3QgcG9ydCBpcyB0aGUgbGVmdCBtb3N0IG9uZSBhbmQgdGhlIHNlY29uZCBwb3J0IGlzIHRoZSByaWdodCBtb3N0IG9uZVxuICAgICAgZmlyc3RQb3J0LnggPSAtMSAqIHBvcnREaXN0YW5jZTtcbiAgICAgIHNlY29uZFBvcnQueCA9IHBvcnREaXN0YW5jZTtcbiAgICAgIGZpcnN0UG9ydC55ID0gMDtcbiAgICAgIHNlY29uZFBvcnQueSA9IDA7XG4gICAgfVxuICAgIGVsc2UgeyAvLyBJZiBvcmRlcmluZyBpcyAnVC10by1CJyBvciAnQi10by1UJ1xuICAgICAgIC8vIElmIG9yZGVyaW5nIGlzIGluIHZlcnRpY2FsIGF4aXMgZmlyc3QgcG9ydCBpcyB0aGUgdG9wIG1vc3Qgb25lIGFuZCB0aGUgc2Vjb25kIHBvcnQgaXMgdGhlIGJvdHRvbSBtb3N0IG9uZVxuICAgICAgZmlyc3RQb3J0LnkgPSAtMSAqIHBvcnREaXN0YW5jZTtcbiAgICAgIHNlY29uZFBvcnQueSA9IHBvcnREaXN0YW5jZTtcbiAgICAgIGZpcnN0UG9ydC54ID0gMDtcbiAgICAgIHNlY29uZFBvcnQueCA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGZyb21Mb3JUID0gb3JkZXJpbmcgPT09ICdMLXRvLVInIHx8IG9yZGVyaW5nID09PSAnVC10by1CJzsgLy8gQ2hlY2sgaWYgb3JkZXJpbmcgc3RhcnRzIGZyb20gbGVmdCBvciB0b3BcbiAgICB2YXIgcG9ydHMgPSBbZmlyc3RQb3J0LCBzZWNvbmRQb3J0XTsgLy8gUG9ydHMgYXJyYXkgZm9yIHRoZSBub2RlXG4gICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpOyAvLyBUaGUgZWRnZXMgY29ubmVjdGVkIHRvIHRoZSBub2RlXG5cbiAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICBub2RlLmRhdGEoJ3BvcnRzJywgcG9ydHMpO1xuXG4gICAgLy8gUmVzZXQgdGhlIHBvcnRzb3VyY2UgYW5kIHBvcnR0YXJnZXQgZm9yIGVhY2ggZWRnZSBjb25uZWN0ZWQgdG8gdGhlIG5vZGVcbiAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBjb25uZWN0ZWRFZGdlcy5sZW5ndGg7IGkrKyApIHtcbiAgICAgIHZhciBlZGdlID0gY29ubmVjdGVkRWRnZXNbaV07XG4gICAgICB2YXIgZWRnZUNsYXNzID0gZWRnZS5kYXRhKCdjbGFzcycpO1xuICAgICAgLypcbiAgICAgICAqIElmIHRoZSBub2RlIGlzIHRoZSBlZGdlIHRhcmdldCB3ZSBtYXkgbmVlZCB0byBzZXQgdGhlIHBvcnR0YXJnZXQgb2YgdGhlIGVkZ2UgdG8gdGhlIGlucHV0IHBvcnQgb2YgdGhlIG5vZGUgKEZpcnN0IG9yIHNlY29uZCBwb3J0IGFjY29yaW5nIHRvIHRoZSBvcmllbnRhdGlvbilcbiAgICAgICAqIGlmIGl0IGlzIHRoZSBlZGdlIHNvcnVjZSB3ZSBtYXkgbmVlZCB0byBzZXQgdGhlIHBvcnRzb3VyY2Ugb2YgdGhlIGVkZ2UgdG8gdGhlIG91dHB1dCBwb3J0IHNpbWlsYXJseS5cbiAgICAgICAqIE5vdGUgdGhhdCBpZiBmcm9uIGxlZnQgb3IgdG9wIChmcm9tTG9yVCkgaXMgdHJ1ZSB0aGVuIHRoZSBmaXJzdCBwb3J0IGlzIHRoZSBzb3VyY2UgcG9ydCBhbmQgc2Vjb25kIHBvcnQgaXMgdGhlIHRhcmdldCBwb3J0LFxuICAgICAgICogZWxzZSBpdCBpcyB2aWNlIHZlcnNhLlxuICAgICAgICpcbiAgICAgICAqL1xuICAgICAgaWYgKCBlZGdlLmRhdGEoJ3RhcmdldCcpID09PSBub2RlLmlkKCkgKSB7XG4gICAgICAgIGlmIChlZGdlQ2xhc3MgPT09ICdwcm9kdWN0aW9uJyB8fCB0aGlzLmlzTW9kdWxhdGlvbkFyY0NsYXNzKGVkZ2VDbGFzcykpIHtcbiAgICAgICAgICBjb250aW51ZTsgLy8gcHJvZHVjdGlvbiBvciBtb2R1bGF0aW9uIHR5cGUgb2YgZWRnZXMgY2Fubm90IGJlIGNvbm5lY3RlZCB0byBhbnkgcG9ydCBvZiB0YXJnZXQgbm9kZSAoQSBwcm9kdWN0aW9uIGNhbiBoYXZlIGEgcHJvY2VzcyBhcyB0YXJnZXQgbm9kZSBidXQgaXQgaXMgc3VwcG9zZWQgdG8gYmUgY29ubmVjdGVkIHRvIHRoYXQgbm9kZSBmcm9tIGl0cyBib2R5LCBub3QgZnJvbSBhIHBvcnQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBmcm9tTG9yVCApIHtcbiAgICAgICAgICBlZGdlLmRhdGEoJ3BvcnR0YXJnZXQnLCBmaXJzdFBvcnRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZWRnZS5kYXRhKCdwb3J0dGFyZ2V0Jywgc2Vjb25kUG9ydElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChlZGdlQ2xhc3MgPT09ICdjb25zdW1wdGlvbicpIHtcbiAgICAgICAgICBjb250aW51ZTsgLy8gY29uc3VtcGl0b24gZWRnZSBjYW5ub3QgYmUgY29ubmVjdGVkIHRvIGFueSBwb3J0IG9mIHNvdXJjZSBub2RlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBmcm9tTG9yVCApIHtcbiAgICAgICAgICBlZGdlLmRhdGEoJ3BvcnRzb3VyY2UnLCBzZWNvbmRQb3J0SWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVkZ2UuZGF0YSgncG9ydHNvdXJjZScsIGZpcnN0UG9ydElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGN5LmVuZEJhdGNoKCk7XG4gIH07XG5cbiAgLypcbiAgKiBSZW1vdmUgdGhlIHBvcnRzIG9mIHRoZSBnaXZlbiBub2RlXG4gICovXG4gIGVsZW1lbnRVdGlsaXRpZXMucmVtb3ZlUG9ydHMgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgdmFyIGNvbm5lY3RlZEVkZ2VzID0gbm9kZS5jb25uZWN0ZWRFZGdlcygpO1xuICAgIHZhciBub2RlSWQgPSBub2RlLmlkKCk7XG5cbiAgICBjeS5zdGFydEJhdGNoKCk7XG5cbiAgICAvLyBSZXNldCBwb3J0c291cmNlIG9yIHBvcnR0YXJnZXQgb2YgdGhlIGNvbm5lY3RlZCBlZGdlcyB0byB0aGUgbm9kZSBpZFxuICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGNvbm5lY3RlZEVkZ2VzLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRFZGdlc1tpXTtcbiAgICAgIGlmICggZWRnZS5kYXRhKCdzb3VyY2UnKSA9PT0gbm9kZUlkICkge1xuICAgICAgICBlZGdlLmRhdGEoJ3BvcnRzb3VyY2UnLCBub2RlSWQpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGVkZ2UuZGF0YSgncG9ydHRhcmdldCcsIG5vZGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZS5kYXRhKCdwb3J0cycsIFtdKTsgLy8gQ2xlYXIgcG9ydHMgZGF0YVxuXG4gICAgY3kuZW5kQmF0Y2goKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZVBvcnRzT3JpZW50YXRpb25BZnRlckxheW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgLy9DaGVjayBhbGwgcHJvY2Vzc2VzIGFuZCBsb2dpY2FsIG9wZXJhdG9ycyB3aXRoIHBvcnRzXG4gICAgICBjeS5ub2RlcygpLmZvckVhY2goZnVuY3Rpb24oZWxlKXtcbiAgICAgICAgICBpZiAoZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdwcm9jZXNzJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ29taXR0ZWQgcHJvY2VzcycgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICd1bmNlcnRhaW4gcHJvY2VzcycgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdhc3NvY2lhdGlvbicgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdkaXNzb2NpYXRpb24nIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnYW5kJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ29yJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ25vdCcpXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoIGVsZS5kYXRhKCdwb3J0cycpLmxlbmd0aCA9PT0gMiApXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhciBiZXN0T3JpZW50YXRpb24gPSBlbGVtZW50VXRpbGl0aWVzLmNoYW5nZVBvcnRzT3JpZW50YXRpb24oZWxlKTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhlbGUsIGJlc3RPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgICAgICAvLyBJZiBpbXByb3ZlLWZsb3cgaXMgY2hlY2tlZCB3ZSBkbyB0aGUgc3dhcGluZyBvZiBzaW1wbGUgbm9kZXMgd2l0aCBlYWNoIG90aGVyXG4gICAgICAgICAgICAgICAgICB2YXIgaW1wcm92ZUZsb3cgPSBvcHRpb25zLmltcHJvdmVGbG93O1xuICAgICAgICAgICAgICAgICAgaW1wcm92ZUZsb3cgPSB0eXBlb2YgaW1wcm92ZUZsb3cgPT09ICdmdW5jdGlvbicgPyBpbXByb3ZlRmxvdy5jYWxsKCkgOiBpbXByb3ZlRmxvdztcbiAgICAgICAgICAgICAgICAgIGlmIChpbXByb3ZlRmxvdylcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnBvc3RDaGFuZ2VQb3J0c09yaWVudGF0aW9uKGVsZSwgYmVzdE9yaWVudGF0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuICAvKlxuICAgQ2FsY3VsYXRlcyB0aGUgYmVzdCBvcmllbnRhdGlvbiBmb3IgYW4gJ2VsZScgd2l0aCBwb3J0IChwcm9jZXNzIG9yIGxvZ2ljYWwgb3BlcmF0b3IpIGFuZCByZXR1cm5zIGl0LlxuICAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5jaGFuZ2VQb3J0c09yaWVudGF0aW9uID0gZnVuY3Rpb24oZWxlKSB7XG4gICAgICB2YXIgcHJvY2Vzc0lkID0gZWxlLmlkKCk7XG4gICAgICB2YXIgb3JpZW50YXRpb24gPSB7J0wtdG8tUic6IDAsICdSLXRvLUwnIDogMCwgJ1QtdG8tQicgOiAwLCAnQi10by1UJyA6IDB9O1xuICAgICAgdmFyIHRhcmdldGluZ0VkZ2VzID0gY3kuZWRnZXMoXCJbdGFyZ2V0PSdcIitwcm9jZXNzSWQrXCInXVwiKTsgLy8gSG9sZHMgZWRnZXMgd2hvIGhhdmUgdGhlIGlucHV0IHBvcnQgYXMgYSB0YXJnZXRcbiAgICAgIHZhciBzb3VyY2luZ0VkZ2VzID0gY3kuZWRnZXMoXCJbc291cmNlPSdcIitwcm9jZXNzSWQrXCInXVwiKTsgLy8gSG9sZHMgZWRnZXMgd2hvIGhhdmUgdGhlIG91dHB1dCBwb3J0IGFzIGEgc291cmNlXG4gICAgICAvLyBDaGVja3MgaWYgdGhlIHBvcnRzIGJlbG9uZyB0byBhIHByb2Nlc3Mgb3IgbG9naWFsIG9wZXJhdG9yLCBpdCBkb2VzIHRoZSBjYWxjdWxhdGlvbnMgYmFzZWQgb24gdGhlIGVkZ2VzIGNvbm5lY3RlZCB0byBpdHMgcG9ydHNcbiAgICAgIGlmIChlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ3Byb2Nlc3MnIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnb21pdHRlZCBwcm9jZXNzJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ3VuY2VydGFpbiBwcm9jZXNzJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ2Fzc29jaWF0aW9uJyB8fCBlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ2Rpc3NvY2lhdGlvbicpXG4gICAgICB7XG4gICAgICAgICAgdGFyZ2V0aW5nRWRnZXMuZm9yRWFjaChmdW5jdGlvbihlZGdlKXtcbiAgICAgICAgICAgICAgaWYgKGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ2NvbnN1bXB0aW9uJylcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IGN5LmdldEVsZW1lbnRCeUlkKGVkZ2UuZGF0YSgnc291cmNlJykpOyAvL0hvbGRzIHRoZSBlbGVtZW50IGZyb20gdGhlIG90aGVyIHNpZGUgb2YgZWRnZVxuICAgICAgICAgICAgICAgICAgdmFyIHNpbXBsZSA9IGZhbHNlOyAvL0NoZWNrcyBpZiBpdCBpcyBhIHNpbXBsZSBub2RlIC0gY29ubmVjdGVkIHdpdGggb25seSAxIGVkZ2VcbiAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgc2ltcGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlT3JpZW50YXRpb25TY29yZShlbGUsIHNvdXJjZSwgb3JpZW50YXRpb24sICdMLXRvLVInLCAnUi10by1MJywgJ3gnLCBzaW1wbGUpO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVPcmllbnRhdGlvblNjb3JlKGVsZSwgc291cmNlLCBvcmllbnRhdGlvbiwgJ1QtdG8tQicsICdCLXRvLVQnLCAneScsIHNpbXBsZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzb3VyY2luZ0VkZ2VzLmZvckVhY2goZnVuY3Rpb24gKGVkZ2UpIHtcbiAgICAgICAgICAgICAgaWYgKGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWRnZS5kYXRhKCd0YXJnZXQnKSk7XG4gICAgICAgICAgICAgICAgICB2YXIgc2ltcGxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU9yaWVudGF0aW9uU2NvcmUoZWxlLCB0YXJnZXQsIG9yaWVudGF0aW9uLCAnUi10by1MJywgJ0wtdG8tUicsICd4Jywgc2ltcGxlKTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlT3JpZW50YXRpb25TY29yZShlbGUsIHRhcmdldCwgb3JpZW50YXRpb24sICdCLXRvLVQnLCAnVC10by1CJywgJ3knLCBzaW1wbGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChlbGUuZGF0YSgnY2xhc3MnKSA9PT0gJ2FuZCcgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdvcicgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdub3QnKVxuICAgICAge1xuICAgICAgICAgIHRhcmdldGluZ0VkZ2VzLmZvckVhY2goZnVuY3Rpb24oZWRnZSl7XG4gICAgICAgICAgICAgIGlmIChlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICdsb2dpYyBhcmMnKVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWRnZS5kYXRhKCdzb3VyY2UnKSk7XG4gICAgICAgICAgICAgICAgICB2YXIgc2ltcGxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICAgIHNpbXBsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU9yaWVudGF0aW9uU2NvcmUoZWxlLCBzb3VyY2UsIG9yaWVudGF0aW9uLCAnTC10by1SJywgJ1ItdG8tTCcsICd4Jywgc2ltcGxlKTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlT3JpZW50YXRpb25TY29yZShlbGUsIHNvdXJjZSwgb3JpZW50YXRpb24sICdULXRvLUInLCAnQi10by1UJywgJ3knLCBzaW1wbGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc291cmNpbmdFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgICAgIGlmIChlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICdtb2R1bGF0aW9uJyB8fCBlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICdzdGltdWxhdGlvbicgfHwgZWRnZS5kYXRhKCdjbGFzcycpID09PSAnY2F0YWx5c2lzJyB8fCBlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICdpbmhpYml0aW9uJyB8fCBlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICduZWNlc3Nhcnkgc3RpbXVsYXRpb24nIHx8IGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ2xvZ2ljIGFyYycpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBjeS5nZXRFbGVtZW50QnlJZChlZGdlLmRhdGEoJ3RhcmdldCcpKTtcbiAgICAgICAgICAgICAgICAgIHZhciBzaW1wbGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuY29ubmVjdGVkRWRnZXMoKS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICAgICAgICAgICAgc2ltcGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuY2FsY3VsYXRlT3JpZW50YXRpb25TY29yZShlbGUsIHRhcmdldCwgb3JpZW50YXRpb24sICdSLXRvLUwnLCAnTC10by1SJywgJ3gnLCBzaW1wbGUpO1xuICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5jYWxjdWxhdGVPcmllbnRhdGlvblNjb3JlKGVsZSwgdGFyZ2V0LCBvcmllbnRhdGlvbiwgJ0ItdG8tVCcsICdULXRvLUInLCAneScsIHNpbXBsZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vQ2FsY3VsYXRlcyB0aGUgYmVzdCBvcmllbnRhdGlvbiBmcm9tIGFsbCBvcmllbnRhdGlvbiBzY29yZXNcbiAgICAgIHZhciBiZXN0T3JpZW50YXRpb24gPSBcIkwtdG8tUlwiO1xuICAgICAgdmFyIGJlc3RTY29yZSA9IG9yaWVudGF0aW9uWydMLXRvLVInXTsvL1RoZSBzY29yZSBvZiB0aGUgYmVzdCBvcmllbnRhdGlvbiBpcyBhbHdheXMgcG9zaXRpdmVcbiAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIG9yaWVudGF0aW9uKSB7XG4gICAgICAgICAgaWYgKG9yaWVudGF0aW9uW3Byb3BlcnR5XSA+IGJlc3RTY29yZSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJlc3RTY29yZSA9IG9yaWVudGF0aW9uW3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgYmVzdE9yaWVudGF0aW9uID0gcHJvcGVydHk7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJlc3RPcmllbnRhdGlvbjtcbiAgfTtcblxuICAvKlxuICAgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBzY29yZXMgZm9yIGVhY2ggb3JpZW50YXRpb25cbiAgIEBwYXJhbSBlbGUgLSBpcyB0aGUgbm9kZSAocHJvY2VzcywgbG9naWNhbCBvcGVyYXRvcikgd2hvc2Ugb3JpZW50YXRpb24gd2lsbCBiZSBjaGFuZ2VkLiBJdCBjYW4gYmUgcHJvY2VzcyxvbWl0dGVkIHByb2Nlc3MsXG4gICB1bmNlcnRhaW4gcHJvY2VzcywgYXNzb2NpYXRpb24sIGRpc3NvY2lhdGlvbiwgbG9naWNhbCBvcGVyYXRvclxuICAgQHBhcmFtIG90aGVyIC0gaXMgdGhlIG90aGVyIG5vZGUsIGFuZCBiYXNlZCBvbiBpdHMgcG9zaXRpb24gc2NvcmVzIGFyZSBnaXZlbiB0byBvcmllbnRhdGlvbnNcbiAgIEBwYXJhbSBvcmllbnRhdGlvbiAtIGhvbGRzIHNjb3JlcyBmb3IgZWFjaCBvcmllbnRhdGlvblxuICAgQHBhcmFtIGZpcnN0T3JpZW50YXRpb24gLSBjYW4gYmUgTC10by1SIG9yIFQtdG8tQlxuICAgQHBhcmFtIG9wcG9zaXRlT3JpZW50YXRpb24gLSBvcHBvc2l0ZSBvZiB0aGUgdXBwZXIgb3JpZW50YXRpb24gKFItdG8tTCAsIEItdG8tVClcbiAgIEBwYXJhbSBwb3MgLSBjYW4gYmUgJ3gnIG9yICd5JyAoYmFzZWQgb24gdmVydGljYWwgb3IgaG9yaXpvbnRhbCBkaXJlY3Rpb24gb2YgcG9ydHMpXG4gICBAcGFyYW0gc2ltcGxlIC0gY2hlY2tzIGlmICdvdGhlcicgbm9kZSBpcyBzaW1wbGUgbm9kZSAod2l0aCBkZWdyZWUgMSlcbiAgICovXG4gICBlbGVtZW50VXRpbGl0aWVzLmNhbGN1bGF0ZU9yaWVudGF0aW9uU2NvcmUgPSBmdW5jdGlvbihlbGUsIG90aGVyLCBvcmllbnRhdGlvbiwgZmlyc3RPcmllbnRhdGlvbiwgb3Bwb3NpdGVPcmllbnRhdGlvbiwgcG9zLCBzaW1wbGUpIHtcbiAgICAgdmFyIGNvZWZmID0gMC41O1xuICAgICB2YXIgc2NvcmUgPSAyO1xuICAgICBpZiAoc2ltcGxlKVxuICAgICAgICAgc2NvcmUgPSAxOyAvLyBJZiBpdCBpcyBhIHNpbXBsZSBub2RlLCBpdHMgc2NvcmUgc2hvdWxkIGFmZmVjdCBsZXNzXG4gICAgIHZhciBub2RlV2lkdGhPckhlaWdodCA9IDA7XG4gICAgIGlmIChwb3MgPT09ICd4JylcbiAgICAgICAgIG5vZGVXaWR0aE9ySGVpZ2h0ID0gZWxlLndpZHRoKCkvMjtcbiAgICAgZWxzZSBpZiAocG9zID09PSd5JylcbiAgICAgICAgIG5vZGVXaWR0aE9ySGVpZ2h0ID0gZWxlLmhlaWdodCgpLzI7XG4gICAgIGlmIChvdGhlci5wb3NpdGlvbihwb3MpIDwgZWxlLnBvc2l0aW9uKHBvcykgLSBub2RlV2lkdGhPckhlaWdodClcbiAgICAge1xuICAgICAgICAgb3JpZW50YXRpb25bZmlyc3RPcmllbnRhdGlvbl0gKz0gc2NvcmU7XG4gICAgICAgICBvcmllbnRhdGlvbltvcHBvc2l0ZU9yaWVudGF0aW9uXSAtPSBzY29yZTtcbiAgICAgfVxuICAgICBlbHNlIGlmIChvdGhlci5wb3NpdGlvbihwb3MpID49IGVsZS5wb3NpdGlvbihwb3MpIC0gbm9kZVdpZHRoT3JIZWlnaHQgJiYgb3RoZXIucG9zaXRpb24ocG9zKSA8PSBlbGUucG9zaXRpb24ocG9zKSArIG5vZGVXaWR0aE9ySGVpZ2h0KVxuICAgICB7XG4gICAgICAgICBvcmllbnRhdGlvbltmaXJzdE9yaWVudGF0aW9uXSArPSAoZWxlLnBvc2l0aW9uKHBvcykgLSBvdGhlci5wb3NpdGlvbihwb3MpKS9ub2RlV2lkdGhPckhlaWdodCpjb2VmZjtcbiAgICAgICAgIG9yaWVudGF0aW9uW29wcG9zaXRlT3JpZW50YXRpb25dIC09IChlbGUucG9zaXRpb24ocG9zKSAtIG90aGVyLnBvc2l0aW9uKHBvcykpL25vZGVXaWR0aE9ySGVpZ2h0KmNvZWZmO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKG90aGVyLnBvc2l0aW9uKHBvcykgPiAgZWxlLnBvc2l0aW9uKHBvcykgKyBub2RlV2lkdGhPckhlaWdodClcbiAgICAge1xuICAgICAgICAgb3JpZW50YXRpb25bZmlyc3RPcmllbnRhdGlvbl0gLT0gc2NvcmU7XG4gICAgICAgICBvcmllbnRhdGlvbltvcHBvc2l0ZU9yaWVudGF0aW9uXSArPSBzY29yZTtcbiAgICAgfVxuICB9O1xuXG4gIC8qXG4gIEFmdGVyIGEgcHJvY2VzcyBpcyBvcmllbnRlZCwgZm9yIGVhY2ggc2ltcGxlIG5vZGUgdGhhdCBpcyBvbiB0aGUgd3Jvbmcgc2lkZSBvZiB0aGUgcG9ydCxcbiAgd2UgdHJ5IHRvIGZpbmQgYW5vdGhlciBzaW1wbGUgbm9kZSBvZiBkZWdyZWUgMCBvbiB0aGUgb3Bwb3NpdGUgc2lkZSBhbmQgc3dhcCB0aGVtIGFmdGVyd2FyZHMuXG4gIElmIGZyb20gdGhlIG9wcG9zaWRlIHNpZGUgd2UgY2Fubm90IGZpbmQgc3VjaCBhIG5vZGUgdGhlbiB3ZSB0cnkgdG8gc3dhcCBpdCB3aXRoIGFuIGVmZmVjdG9yIG5vZGUgb2YgZGVncmVlIDFcbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5wb3N0Q2hhbmdlUG9ydHNPcmllbnRhdGlvbiA9IGZ1bmN0aW9uKGVsZSwgYmVzdE9yaWVudGF0aW9uKSB7XG4gICAgICB2YXIgcHJvY2Vzc0lkID0gZWxlLmlkKCk7XG4gICAgICB2YXIgaW5wdXRQb3J0ID0gW107IC8vIEhvbGRzIGFsbCBzaW1wbGUgbm9kZXMgY29ubmVjdGVkIHdpdGggaW5wdXQgcG9ydFxuICAgICAgdmFyIG91dHB1dFBvcnQgPSBbXTsgLy8gSG9sZHMgYWxsIHNpbXBsZSBub2RlcyBjb25uZWN0ZWQgd2l0aCBvdXRwdXQgcG9ydFxuICAgICAgdmFyIG5vdENvbm5lY3RlZFRvUG9ydCA9IFtdOyAvLyBIb2xkcyBhbGwgc2ltcGxlIG5vZGVzIG5vdCBjb25uZWN0ZWQgd2l0aCBpbnB1dCBvciBvdXRwdXQgcG9ydFxuICAgICAgdmFyIHRhcmdldGluZ0VkZ2VzID0gY3kuZWRnZXMoXCJbdGFyZ2V0PSdcIitwcm9jZXNzSWQrXCInXVwiKTtcbiAgICAgIHZhciBzb3VyY2luZ0VkZ2VzID0gY3kuZWRnZXMoXCJbc291cmNlPSdcIitwcm9jZXNzSWQrXCInXVwiKTtcbiAgICAgIC8vIENoZWNrcyBzaW1wbGUgbm9kZXMgYW5kIGFkZCB0aGVtIHRvIG9uZSBvZiB0aGUgYXJyYXlzIG1lbnRpb25lZCBhYm92ZVxuICAgICAgaWYgKGVsZS5kYXRhKCdjbGFzcycpID09PSAncHJvY2VzcycgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdvbWl0dGVkIHByb2Nlc3MnIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAndW5jZXJ0YWluIHByb2Nlc3MnIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnYXNzb2NpYXRpb24nIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnZGlzc29jaWF0aW9uJylcbiAgICAgIHtcbiAgICAgICAgICB0YXJnZXRpbmdFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2Upe1xuICAgICAgICAgICAgICB2YXIgc291cmNlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWRnZS5kYXRhKCdzb3VyY2UnKSk7XG4gICAgICAgICAgICAgIGlmKCFzb3VyY2UuaXNQYXJlbnQoKSl7XG4gICAgICAgICAgICAgICAgaWYgKGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ2NvbnN1bXB0aW9uJylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU2ltcGxlTm9kZVRvQXJyYXkoZWxlLCBzb3VyY2UsIGJlc3RPcmllbnRhdGlvbiwgaW5wdXRQb3J0LCBcImlucHV0XCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFNpbXBsZU5vZGVUb0FycmF5KGVsZSwgc291cmNlLCBiZXN0T3JpZW50YXRpb24sIG5vdENvbm5lY3RlZFRvUG9ydCwgXCJub3RDb25uZWN0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc291cmNpbmdFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uIChlZGdlKSB7XG4gICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBjeS5nZXRFbGVtZW50QnlJZChlZGdlLmRhdGEoJ3RhcmdldCcpKTtcbiAgICAgICAgICAgICAgaWYoIXRhcmdldC5pc1BhcmVudCgpKXtcbiAgICAgICAgICAgICAgICBpZiAoZWRnZS5kYXRhKCdjbGFzcycpID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTaW1wbGVOb2RlVG9BcnJheShlbGUsIHRhcmdldCwgYmVzdE9yaWVudGF0aW9uLCBvdXRwdXRQb3J0LCBcIm91dHB1dFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTaW1wbGVOb2RlVG9BcnJheShlbGUsIHRhcmdldCwgYmVzdE9yaWVudGF0aW9uLCBub3RDb25uZWN0ZWRUb1BvcnQsIFwibm90Q29ubmVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoZWxlLmRhdGEoJ2NsYXNzJykgPT09ICdhbmQnIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnb3InIHx8IGVsZS5kYXRhKCdjbGFzcycpID09PSAnbm90JylcbiAgICAgIHtcbiAgICAgICAgICB0YXJnZXRpbmdFZGdlcy5mb3JFYWNoKGZ1bmN0aW9uKGVkZ2Upe1xuICAgICAgICAgICAgICB2YXIgc291cmNlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWRnZS5kYXRhKCdzb3VyY2UnKSk7XG4gICAgICAgICAgICAgIGlmKCFzb3VyY2UuaXNQYXJlbnQoKSl7XG4gICAgICAgICAgICAgICAgaWYgKGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ2xvZ2ljIGFyYycpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLmFkZFNpbXBsZU5vZGVUb0FycmF5KGVsZSwgc291cmNlLCBiZXN0T3JpZW50YXRpb24sIGlucHV0UG9ydCwgXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFV0aWxpdGllcy5hZGRTaW1wbGVOb2RlVG9BcnJheShlbGUsIHNvdXJjZSwgYmVzdE9yaWVudGF0aW9uLCBub3RDb25uZWN0ZWRUb1BvcnQsIFwibm90Q29ubmVjdGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNvdXJjaW5nRWRnZXMuZm9yRWFjaChmdW5jdGlvbiAoZWRnZSkge1xuICAgICAgICAgICAgICB2YXIgdGFyZ2V0ID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWRnZS5kYXRhKCd0YXJnZXQnKSk7XG4gICAgICAgICAgICAgIGlmKCF0YXJnZXQuaXNQYXJlbnQoKSl7XG4gICAgICAgICAgICAgICAgaWYgKGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ21vZHVsYXRpb24nIHx8IGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ3N0aW11bGF0aW9uJyB8fCBlZGdlLmRhdGEoJ2NsYXNzJykgPT09ICdjYXRhbHlzaXMnIHx8IGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ2luaGliaXRpb24nIHx8IGVkZ2UuZGF0YSgnY2xhc3MnKSA9PT0gJ25lY2Vzc2FyeSBzdGltdWxhdGlvbicgfHwgZWRnZS5kYXRhKCdjbGFzcycpID09PSAnbG9naWMgYXJjJylcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU2ltcGxlTm9kZVRvQXJyYXkoZWxlLCB0YXJnZXQsIGJlc3RPcmllbnRhdGlvbiwgb3V0cHV0UG9ydCwgXCJvdXRwdXRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuYWRkU2ltcGxlTm9kZVRvQXJyYXkoZWxlLCB0YXJnZXQsIGJlc3RPcmllbnRhdGlvbiwgbm90Q29ubmVjdGVkVG9Qb3J0LCBcIm5vdENvbm5lY3RlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vVGhlIGFycmF5cyBhcmUgc29ydGVkIGluIG9yZGVyIHRvIGtlZXAgdGhlIGhpZ2ggcHJpb3JpdHkgb2Ygbm9kZXMgcG9zaXRpb25lZCBjb21wbGV0ZWx5IHRvIHRoZSBvdGhlciBzaWRlXG4gICAgICBpbnB1dFBvcnQuc29ydChmdW5jdGlvbihhLCBiKXtyZXR1cm4gYi5zY29yZSAtIGEuc2NvcmV9KTtcbiAgICAgIG91dHB1dFBvcnQuc29ydChmdW5jdGlvbihhLCBiKXtyZXR1cm4gYi5zY29yZSAtIGEuc2NvcmV9KTtcbiAgICAgIG5vdENvbm5lY3RlZFRvUG9ydC5zb3J0KGZ1bmN0aW9uKGEsIGIpe3JldHVybiBhLnNjb3JlIC0gYi5zY29yZX0pO1xuICAgICAgLy9GaXJzdCB3ZSBjaGVjayBmb3IgZGlyZWN0IHN3YXBpbmcgYmV0d2VlbiBub2RlcyBmcm9tIGRpZmZlcmVudCBwb3J0cyBwb3NpdGlvbmVkIHRvIHRoZSB3cm9uZyBzaWRlXG4gICAgICB2YXIgbWluTGVuZ3RoID0gaW5wdXRQb3J0Lmxlbmd0aDtcbiAgICAgIGlmIChvdXRwdXRQb3J0Lmxlbmd0aCA8IG1pbkxlbmd0aClcbiAgICAgICAgICBtaW5MZW5ndGggPSBvdXRwdXRQb3J0Lmxlbmd0aDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5MZW5ndGg7IGkrKylcbiAgICAgIHtcbiAgICAgICAgICB2YXIgaW5wdXRQb3J0RWxlID0gaW5wdXRQb3J0LnBvcCgpO1xuICAgICAgICAgIHZhciBvdXRwdXRQb3J0RWxlID0gb3V0cHV0UG9ydC5wb3AoKTtcbiAgICAgICAgICAvL0NoZWNrcyBpZiBmcmVlIG5vZGVzIGJlbG9uZyB0byB0aGUgc2FtZSBjb21wb3VuZFxuICAgICAgICAgIHZhciBmaXJzdE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChpbnB1dFBvcnRFbGUuaWQpO1xuICAgICAgICAgIHZhciBzZWNvbmROb2RlID0gY3kuZ2V0RWxlbWVudEJ5SWQob3V0cHV0UG9ydEVsZS5pZCk7XG4gICAgICAgICAgaWYgKGZpcnN0Tm9kZS5kYXRhKCdwYXJlbnQnKSAhPT0gc2Vjb25kTm9kZS5kYXRhKCdwYXJlbnQnKSlcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnN3YXBFbGVtZW50cyhpbnB1dFBvcnRFbGUsIG91dHB1dFBvcnRFbGUpO1xuICAgICAgfVxuICAgICAgLypcbiAgICAgICBBZnRlciB0aGF0IHdlIGl0ZXJhdGUgb3ZlciBlYWNoIGVsZW1lbnQgb2YgZWZmZWN0b3Igbm9kZXMgYW5kIHNlZSB0aGUgc2NvcmVzIGl0IHByb2R1Y2VzIGJ5IHN3YXBpbmdcbiAgICAgICB3aXRoIG5vZGVzIGNvbm5lY3RlZCB0byBpbnB1dCBvciBvdXRwdXQgcG9ydHNcbiAgICAgICAqL1xuICAgICAgZm9yIChpID0gbm90Q29ubmVjdGVkVG9Qb3J0Lmxlbmd0aCAtMTsgaSA+PSAwIDsgaS0tKVxuICAgICAge1xuICAgICAgICAgIHZhciBlZmZlY3RvciA9IG5vdENvbm5lY3RlZFRvUG9ydFtpXTtcbiAgICAgICAgICBpZiAob3V0cHV0UG9ydC5sZW5ndGggPiAwKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGZpcnN0T3V0cHV0ID0gb3V0cHV0UG9ydFtvdXRwdXRQb3J0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAvL0NoZWNrcyBpZiBmcmVlIG5vZGVzIGJlbG9uZyB0byB0aGUgc2FtZSBjb21wb3VuZFxuICAgICAgICAgICAgICB2YXIgZmlyc3ROb2RlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZWZmZWN0b3IuaWQpO1xuICAgICAgICAgICAgICB2YXIgc2Vjb25kTm9kZSA9IGN5LmdldEVsZW1lbnRCeUlkKGZpcnN0T3V0cHV0LmlkKTtcbiAgICAgICAgICAgICAgaWYgKGZpcnN0Tm9kZS5kYXRhKCdwYXJlbnQnKSAhPT0gc2Vjb25kTm9kZS5kYXRhKCdwYXJlbnQnKSlcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnN3YXBFbGVtZW50cyhlZmZlY3RvciwgZmlyc3RPdXRwdXQpO1xuICAgICAgICAgICAgICB2YXIgZmlyc3RPdXRwdXRTY29yZSA9IC1lbGVtZW50VXRpbGl0aWVzLmNoZWNrTmVnYXRpdmVPcmllbnRhdGlvblNjb3JlKGVsZSwgY3kuZ2V0RWxlbWVudEJ5SWQoZmlyc3RPdXRwdXQuaWQpLCBiZXN0T3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICBpZiAoIGZpcnN0T3V0cHV0U2NvcmUgPiBmaXJzdE91dHB1dC5zY29yZSlcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb3V0cHV0UG9ydC5wb3AoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnN3YXBFbGVtZW50cyhlZmZlY3RvciwgZmlyc3RPdXRwdXQpOyAvL3N3YXAgYmFja1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChpbnB1dFBvcnQubGVuZ3RoID4gMClcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBmaXJzdElucHV0ID0gaW5wdXRQb3J0W2lucHV0UG9ydC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgLy9DaGVja3MgaWYgZnJlZSBub2RlcyBiZWxvbmcgdG8gdGhlIHNhbWUgY29tcG91bmRcbiAgICAgICAgICAgICAgdmFyIGZpcnN0Tm9kZSA9IGN5LmdldEVsZW1lbnRCeUlkKGVmZmVjdG9yLmlkKTtcbiAgICAgICAgICAgICAgdmFyIHNlY29uZE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChmaXJzdElucHV0LmlkKTtcbiAgICAgICAgICAgICAgaWYgKGZpcnN0Tm9kZS5kYXRhKCdwYXJlbnQnKSAhPT0gc2Vjb25kTm9kZS5kYXRhKCdwYXJlbnQnKSlcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlbGVtZW50VXRpbGl0aWVzLnN3YXBFbGVtZW50cyhlZmZlY3RvciwgZmlyc3RJbnB1dCk7XG4gICAgICAgICAgICAgIHZhciBmaXJzdElucHV0U2NvcmUgPSBlbGVtZW50VXRpbGl0aWVzLmNoZWNrTmVnYXRpdmVPcmllbnRhdGlvblNjb3JlKGVsZSwgY3kuZ2V0RWxlbWVudEJ5SWQoZmlyc3RJbnB1dC5pZCksIGJlc3RPcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgIGlmICggZmlyc3RJbnB1dFNjb3JlID4gZmlyc3RJbnB1dC5zY29yZSlcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaW5wdXRQb3J0LnBvcCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc3dhcEVsZW1lbnRzKGVmZmVjdG9yLCBmaXJzdElucHV0KTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gIH07XG5cbiAgLypcbiAgKiBBZGRzIHNpbXBsZSBub2RlcyB3aGVuIHRoZXkgaGF2ZSBuZWdhdGl2ZSBzY29yZSB0byBpbnB1dFBvcnQsIG91dHB1dFBvcnQgb3Igbm90Q29ubmVjdGVkUG9ydCBhcnJheXNcbiAgKiAqL1xuICBlbGVtZW50VXRpbGl0aWVzLmFkZFNpbXBsZU5vZGVUb0FycmF5ID0gZnVuY3Rpb24oZWxlLCBvdGhlciwgb3JpZW50YXRpb24sIGFycmF5LCBjb25uZWN0ZWRUbykge1xuICAgICAgaWYgKG90aGVyLmNvbm5lY3RlZEVkZ2VzKCkubGVuZ3RoID09PSAxKVxuICAgICAge1xuICAgICAgICAgIHZhciBub2RlU2NvcmU7XG4gICAgICAgICAgdmFyIG9iaiA9IHt9O1xuICAgICAgICAgIGlmIChjb25uZWN0ZWRUbyA9PT0gXCJub3RDb25uZWN0ZWRcIilcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5vZGVTY29yZSA9IE1hdGguYWJzKGVsZW1lbnRVdGlsaXRpZXMuY2hlY2tOZWdhdGl2ZU9yaWVudGF0aW9uU2NvcmUoZWxlLCBvdGhlciwgb3JpZW50YXRpb24pKTtcbiAgICAgICAgICAgICAgb2JqWydpZCddID0gb3RoZXIuaWQoKTtcbiAgICAgICAgICAgICAgb2JqWydzY29yZSddID0gbm9kZVNjb3JlO1xuICAgICAgICAgICAgICBhcnJheS5wdXNoKG9iaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2VcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChjb25uZWN0ZWRUbyA9PT0gXCJpbnB1dFwiKVxuICAgICAgICAgICAgICAgICAgbm9kZVNjb3JlID0gZWxlbWVudFV0aWxpdGllcy5jaGVja05lZ2F0aXZlT3JpZW50YXRpb25TY29yZShlbGUsIG90aGVyLCBvcmllbnRhdGlvbik7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGNvbm5lY3RlZFRvID09PSBcIm91dHB1dFwiKVxuICAgICAgICAgICAgICAgICAgbm9kZVNjb3JlID0gLWVsZW1lbnRVdGlsaXRpZXMuY2hlY2tOZWdhdGl2ZU9yaWVudGF0aW9uU2NvcmUoZWxlLCBvdGhlciwgb3JpZW50YXRpb24pO1xuICAgICAgICAgICAgICBpZiAobm9kZVNjb3JlIDwgMCkgLy9pZiBpdCBpcyBpbiB0aGUgd3Jvbmcgc2lkZSB3ZSBhZGQgaXQgdG8gdGhlIGlucHV0IGFycmF5XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG9ialsnaWQnXSA9IG90aGVyLmlkKCk7XG4gICAgICAgICAgICAgICAgICBvYmpbJ3Njb3JlJ10gPSBub2RlU2NvcmU7XG4gICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKG9iaik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gIH07XG5cbiAgLypcbiAgVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBzY29yZSBvZiBhIG5vZGUgYmFzZWQgb24gaXRzIHBvc2l0aW9uIHdpdGggcmVzcGVjdCB0byBhIHByb2Nlc3MvbG9naWNhbCBvcGVyYXRvclxuICBAcGFyYW0gZWxlIC0gaXMgdGhlIG5vZGUgd2l0aCB0aGUgcG9ydHMuIEl0IGNhbiBiZSBwcm9jZXNzLG9taXR0ZWQgcHJvY2VzcyxcbiAgdW5jZXJ0YWluIHByb2Nlc3MsIGFzc29jaWF0aW9uLCBkaXNzb2NpYXRpb24sIGxvZ2ljYWwgb3BlcmF0b3JcbiAgQHBhcmFtIG90aGVyIC0gaXMgdGhlIG90aGVyIG5vZGUsIGFuZCBiYXNlZCBvbiBpdHMgcG9zaXRpb24gc2NvcmUgb2YgYSBub2RlIGlzIGNhbGN1bGF0ZWRcbiAgQHBhcmFtIG9yaWVudGF0aW9uIC0gQSBzdHJpbmcgd2hpY2ggaG9sZHMgY3VycmVudCBiZXN0IG9yaWVudGF0aW9uXG4gICovXG4gIGVsZW1lbnRVdGlsaXRpZXMuY2hlY2tOZWdhdGl2ZU9yaWVudGF0aW9uU2NvcmUgPSBmdW5jdGlvbihlbGUsIG90aGVyLCBvcmllbnRhdGlvbikge1xuICAgICAgdmFyIGNvZWZmID0gMC41O1xuICAgICAgdmFyIHNjb3JlID0gMTtcbiAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0wtdG8tUicgfHwgb3JpZW50YXRpb24gPT09ICdSLXRvLUwnKVxuICAgICAge1xuICAgICAgICAgIHZhciBub2RlV2lkdGggPSBlbGUud2lkdGgoKS8yO1xuICAgICAgICAgIGlmIChvdGhlci5wb3NpdGlvbigneCcpIDwgZWxlLnBvc2l0aW9uKCd4JykgLSBub2RlV2lkdGgpXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdMLXRvLVInKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3JlO1xuICAgICAgICAgICAgICBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ1ItdG8tTCcpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gLXNjb3JlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChvdGhlci5wb3NpdGlvbigneCcpID49IGVsZS5wb3NpdGlvbigneCcpIC0gbm9kZVdpZHRoICYmIG90aGVyLnBvc2l0aW9uKCd4JykgPD0gZWxlLnBvc2l0aW9uKCd4JykgKyBub2RlV2lkdGgpXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdMLXRvLVInKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChlbGUucG9zaXRpb24oJ3gnKSAtIG90aGVyLnBvc2l0aW9uKCd4JykpL25vZGVXaWR0aCpjb2VmZjtcbiAgICAgICAgICAgICAgZWxzZSBpZiAob3JpZW50YXRpb24gPT09ICdSLXRvLUwnKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIC0oZWxlLnBvc2l0aW9uKCd4JykgLSBvdGhlci5wb3NpdGlvbigneCcpKS9ub2RlV2lkdGgqY29lZmY7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKG90aGVyLnBvc2l0aW9uKCd4JykgPiBlbGUucG9zaXRpb24oJ3gnKSArIG5vZGVXaWR0aClcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ0wtdG8tUicpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gLXNjb3JlO1xuICAgICAgICAgICAgICBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ1ItdG8tTCcpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcmU7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnVC10by1CJyB8fCBvcmllbnRhdGlvbiA9PT0gJ0ItdG8tVCcpXG4gICAgICB7XG4gICAgICAgICAgdmFyIG5vZGVIZWlnaHQgPSBlbGUuaGVpZ2h0KCkvMjtcbiAgICAgICAgICBpZiAob3RoZXIucG9zaXRpb24oJ3knKSA8IGVsZS5wb3NpdGlvbigneScpIC0gbm9kZUhlaWdodClcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PT0gJ1QtdG8tQicpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gc2NvcmU7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKG9yaWVudGF0aW9uID09PSAnQi10by1UJylcbiAgICAgICAgICAgICAgICAgIHJldHVybiAtc2NvcmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKG90aGVyLnBvc2l0aW9uKCd5JykgPj0gZWxlLnBvc2l0aW9uKCd5JykgLSBub2RlSGVpZ2h0ICYmIG90aGVyLnBvc2l0aW9uKCd5JykgPD0gZWxlLnBvc2l0aW9uKCd5JykgKyBub2RlSGVpZ2h0KVxuICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAnVC10by1CJylcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoZWxlLnBvc2l0aW9uKCd5JykgLSBvdGhlci5wb3NpdGlvbigneScpKS9ub2RlSGVpZ2h0KmNvZWZmO1xuICAgICAgICAgICAgICBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gJ0ItdG8tVCcpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gLShlbGUucG9zaXRpb24oJ3knKSAtIG90aGVyLnBvc2l0aW9uKCd5JykpL25vZGVIZWlnaHQqY29lZmY7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKG90aGVyLnBvc2l0aW9uKCd5JykgPiBlbGUucG9zaXRpb24oJ3knKSArIG5vZGVIZWlnaHQpXG4gICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAob3JpZW50YXRpb24gPT09ICdULXRvLUInKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIC1zY29yZTtcbiAgICAgICAgICAgICAgZWxzZSBpZiAob3JpZW50YXRpb24gPT09ICdCLXRvLVQnKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjb3JlO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfTtcblxuICAvKlxuICBTd2FwcyB0aGUgcG9zaXRpb25zIG9mIDIgZWxlbWVudHNcbiAgKi9cbiAgZWxlbWVudFV0aWxpdGllcy5zd2FwRWxlbWVudHMgPSBmdW5jdGlvbihmaXJzdEVsZSwgc2Vjb25kRWxlKSB7XG4gICAgICB2YXIgZmlyc3ROb2RlID0gY3kuZ2V0RWxlbWVudEJ5SWQoZmlyc3RFbGUuaWQpO1xuICAgICAgdmFyIHNlY29uZE5vZGUgPSBjeS5nZXRFbGVtZW50QnlJZChzZWNvbmRFbGUuaWQpO1xuICAgICAgdmFyIHRlbXB4ID0gZmlyc3ROb2RlLnBvc2l0aW9uKCd4Jyk7XG4gICAgICB2YXIgdGVtcHkgPSBmaXJzdE5vZGUucG9zaXRpb24oJ3knKTtcbiAgICAgIGZpcnN0Tm9kZS5wb3NpdGlvbigneCcsIHNlY29uZE5vZGUucG9zaXRpb24oJ3gnKSk7XG4gICAgICBmaXJzdE5vZGUucG9zaXRpb24oJ3knLCBzZWNvbmROb2RlLnBvc2l0aW9uKCd5JykpO1xuICAgICAgc2Vjb25kTm9kZS5wb3NpdGlvbigneCcsIHRlbXB4KTtcbiAgICAgIHNlY29uZE5vZGUucG9zaXRpb24oJ3knLCB0ZW1weSk7XG4gIH07XG5cbiAgLy8gdXNlZCBmb3IgaGFuZGxpbmcgdGhlIHZhcmlhYmxlIHByb3BlcnR5IG9mIGNvbXBsZXhlc1xuICBlbGVtZW50VXRpbGl0aWVzLmdldENvbXBsZXhQYWRkaW5nID0gZnVuY3Rpb24oZWxlKSB7XG4gICAgLy8gdGhpcyBwcm9wZXJ0eSBuZWVkcyB0byB0YWtlIGludG8gYWNjb3VudDpcbiAgICAvLyAtIHByZXNlbmNlIG9mIGEgbGFiZWxcbiAgICAvLyAtIG9wdGlvbiB0byBkaXNwbGF5IGNvbXBsZXggbGFiZWxzXG4gICAgLy8gLSBwcmVzZW5jZSBvZiBzdGF0ZXMgYW5kIGluZm8gYm94IG9uIHRoZSBib3R0b21cbiAgICB2YXIgcGFkZGluZyA9IGdyYXBoVXRpbGl0aWVzLmdldENvbXBvdW5kUGFkZGluZ3MoKTtcbiAgICBwYWRkaW5nID0gcGFkZGluZyA8IDUgPyA1IDogcGFkZGluZztcbiAgICBpZiAob3B0aW9ucy5zaG93Q29tcGxleE5hbWUgJiYgZWxlbWVudFV0aWxpdGllcy5nZXRFbGVtZW50Q29udGVudChlbGUpKSB7XG4gICAgICBwYWRkaW5nICs9IG9wdGlvbnMuZXh0cmFDb21wbGV4UGFkZGluZyAqIDAuNTtcbiAgICAgIC8vIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBvbiB0aGUgYm90dG9tIHNpZGVcblxuICAgICAgaWYgKGVsZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpICYmIGVsZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpLmJvdHRvbSAmJiBlbGUuZGF0YSgnYXV4dW5pdGxheW91dHMnKS5ib3R0b20udW5pdHMubGVuZ3RoID4gMCkge1xuICAgICAgICBwYWRkaW5nICs9IG9wdGlvbnMuZXh0cmFDb21wbGV4UGFkZGluZyAqIDAuNTtcbiAgICAgIH1lbHNleyAgXG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgZm9yKHZhciBpPTA7IGkgPCBlbGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5sZW5ndGg7IGkrKykgeyAgICAgICAgICBcbiAgICAgICAgICB2YXIgc3RhdGVzYW5kaW5mb3MgPSBlbGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKVtpXTsgXG4gICAgICAgICAgXG4gICAgICAgICAgdmFyIHRoaXNZID0gc3RhdGVzYW5kaW5mb3MuYmJveC55O1xuICAgICAgICAgIHZhciB0aGlzSCA9IHN0YXRlc2FuZGluZm9zLmJib3guaDtcbiAgICAgICAgICB2YXIgcGFyZW50WSA9IChlbGUuZGF0YSgnY2xhc3MnKSA9PSBcImNvbXBhcnRtZW50XCIgfHwgZWxlLmRhdGEoJ2NsYXNzJykgPT0gXCJjb21wbGV4XCIpID8gZWxlLmRhdGEoJ2Jib3gnKS55IDogZWxlLnBvc2l0aW9uKCkueTtcbiAgICAgICAgICB2YXIgaGVpZ2h0ID0gZWxlLmRhdGEoXCJvcmlnaW5hbEhcIikgPyBlbGUuZGF0YShcIm9yaWdpbmFsSFwiKSA6IGVsZS5oZWlnaHQoKTtcbiAgICAgICAgICB2YXIgcGFyZW50WTIgPSBOdW1iZXIoKHBhcmVudFkgKyBoZWlnaHQvIDIpLnRvRml4ZWQoMikpO1xuICAgICAgICAgIHZhciBjZW50ZXJZID0gTnVtYmVyKCh0aGlzWSt0aGlzSC8yKS50b0ZpeGVkKDIpKTtcbiAgICAgICAgICBpZihjZW50ZXJZID09IHBhcmVudFkyKXtcbiAgICAgICAgICAgIHBhZGRpbmcgKz0gb3B0aW9ucy5leHRyYUNvbXBsZXhQYWRkaW5nICogMC41O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBwYWRkaW5nIGlzIHRoZSB0aWdodGVzdCwgd2UgbmVlZCBhIGJpdCBvZiBleHRyYSBzcGFjZVxuICAgIC8vIHRvIGF2b2lkIHRvdWNoaW5nIHRoZSBpbmZvYm94ZXMgb2YgdGhlIGNvbXBsZXhcbiAgICBlbHNlIHtcbiAgICAgIGlmIChlbGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhZGRpbmcgKz0gMjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhZGRpbmc7XG4gIH07XG5cbiAgLy8gdXNlZCBmb3IgaGFuZGxpbmcgdGhlIHZhcmlhYmxlIHByb3BlcnR5IG9mIGNvbXBsZXhlc1xuICBlbGVtZW50VXRpbGl0aWVzLmdldENvbXBsZXhNYXJnaW4gPSBmdW5jdGlvbihlbGUpIHtcbiAgICAvLyB0aGlzIHByb3BlcnR5IG5lZWRzIHRvIHRha2UgaW50byBhY2NvdW50OlxuICAgIC8vIC0gcHJlc2VuY2Ugb2YgYSBsYWJlbFxuICAgIC8vIC0gb3B0aW9uIHRvIGRpc3BsYXkgY29tcGxleCBsYWJlbHNcbiAgICAvLyAtIHByZXNlbmNlIG9mIHN0YXRlcyBhbmQgaW5mbyBib3ggb24gdGhlIGJvdHRvbVxuICAgIHZhciBtYXJnaW4gPSAgLTEgKiBvcHRpb25zLmV4dHJhQ29tcGxleFBhZGRpbmc7XG5cbiAgICBpZiAob3B0aW9ucy5zaG93Q29tcGxleE5hbWUgJiZcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcy5nZXRFbGVtZW50Q29udGVudChlbGUpICYmXG4gICAgICAgIGVsZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpICYmIC8vIGNoZWNrIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBvbiB0aGUgYm90dG9tIHNpZGVcbiAgICAgICAgZWxlLmRhdGEoJ2F1eHVuaXRsYXlvdXRzJykuYm90dG9tICYmXG4gICAgICAgIGVsZS5kYXRhKCdhdXh1bml0bGF5b3V0cycpLmJvdHRvbS51bml0cy5sZW5ndGggPiAwKSB7XG4gICAgICBtYXJnaW4gLT0gb3B0aW9ucy5leHRyYUNvbXBsZXhQYWRkaW5nICogMC41O1xuICAgIH1cblxuICAgIGlmIChlbGUuY3NzKFwiZm9udC1zaXplXCIpID09IFwiMTRweFwiKVxuICAgICAgbWFyZ2luIC09IDI7XG5cbiAgICByZXR1cm4gbWFyZ2luO1xuICB9O1xuXG5cbiAgLy8gU2V0IGNsb25lIG1hcmtlciBzdGF0dXMgb2YgZ2l2ZW4gbm9kZXMgdG8gdGhlIGdpdmVuIHN0YXR1cy5cbiAgZWxlbWVudFV0aWxpdGllcy5zZXRDbG9uZU1hcmtlclN0YXR1cyA9IGZ1bmN0aW9uIChub2RlLCBzdGF0dXMpIHtcbiAgICBpZiAoc3RhdHVzKVxuICAgICAgICBub2RlLmRhdGEoJ2Nsb25lbWFya2VyJywgdHJ1ZSk7XG4gICAgZWxzZVxuICAgICAgICBub2RlLnJlbW92ZURhdGEoJ2Nsb25lbWFya2VyJyk7XG5cbiAgICBpZihub2RlLmRhdGEoJ2NsYXNzJykgIT09IFwidW5zcGVjaWZpZWQgZW50aXR5XCIgJiYgbm9kZS5kYXRhKCdjbGFzcycpICE9PSBcInBlcnR1cmJpbmcgYWdlbnRcIilcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgdmFyIGJnT2JqID0ge1xuICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6ICdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjB3aWR0aCUzRCUyMjEwMCUyMiUyMGhlaWdodCUzRCUyMjEwMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEwMCUyMDEwMCUyMiUyMHN0eWxlJTNEJTIyZmlsbCUzQW5vbmUlM0JzdHJva2UlM0FibGFjayUzQnN0cm9rZS13aWR0aCUzQTAlM0IlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0EvL3d3dy53My5vcmcvMjAwMC9zdmclMjIlMjAlM0UlM0NyZWN0JTIweCUzRCUyMjAlMjIlMjB5JTNEJTIyMCUyMiUyMHdpZHRoJTNEJTIyMTAwJTIyJTIwaGVpZ2h0JTNEJTIyMTAwJTIyJTIwc3R5bGUlM0QlMjJmaWxsJTNBJTIzODM4MzgzJTIyLyUzRSUyMCUzQy9zdmclM0UnLFxuICAgICAgICAnYmFja2dyb3VuZC1wb3NpdGlvbi14JzogJzUwJScsXG4gICAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOiAnMTAwJScsXG4gICAgICAgICdiYWNrZ3JvdW5kLXdpZHRoJzogJzEwMCUnLFxuICAgICAgICAnYmFja2dyb3VuZC1oZWlnaHQnOiAnMjUlJyxcbiAgICAgICAgJ2JhY2tncm91bmQtZml0JzogJ25vbmUnLFxuICAgICAgICAnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5JzogJzAnXG4gICAgfTtcblxuICAgIHZhciBpbWdzID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2UnKS5zcGxpdChcIiBcIikgOiBbXTtcbiAgICB2YXIgeFBvcyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teCcpLnNwbGl0KFwiIFwiKSA6IFtdO1xuICAgIHZhciB5UG9zID0gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXknKSA/IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi15Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgdmFyIHdpZHRocyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC13aWR0aCcpID8gbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgdmFyIGhlaWdodHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgdmFyIGZpdHMgPSBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0JykgPyBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0Jykuc3BsaXQoXCIgXCIpIDogW107XG4gICAgdmFyIG9wYWNpdGllcyA9IG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5JykgPyAoXCJcIiArIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZS1vcGFjaXR5JykpLnNwbGl0KFwiIFwiKSA6IFtdO1xuXG4gICAgaWYoc3RhdHVzKXtcbiAgICAgICAgdmFyIGluZGV4ID0gaW1ncy5pbmRleE9mKGJnT2JqWydiYWNrZ3JvdW5kLWltYWdlJ10pO1xuICAgICAgICAvLyBBbHJlYWR5IGV4aXN0czsgTWFrZSBvcGFjaXR5IG5vbi16ZXJvXG4gICAgICAgIGlmKCBpbmRleCA+IC0xKVxuICAgICAgICAgICAgb3BhY2l0aWVzW2luZGV4XSA9IG5vZGUuY3NzKCdiYWNrZ3JvdW5kLW9wYWNpdHknKTtcbiAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIGltZ3MucHVzaChiZ09ialsnYmFja2dyb3VuZC1pbWFnZSddKTtcbiAgICAgICAgICAgIHhQb3MucHVzaChiZ09ialsnYmFja2dyb3VuZC1wb3NpdGlvbi14J10pO1xuICAgICAgICAgICAgeVBvcy5wdXNoKGJnT2JqWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknXSk7XG4gICAgICAgICAgICB3aWR0aHMucHVzaChiZ09ialsnYmFja2dyb3VuZC13aWR0aCddKTtcbiAgICAgICAgICAgIGhlaWdodHMucHVzaChiZ09ialsnYmFja2dyb3VuZC1oZWlnaHQnXSk7XG4gICAgICAgICAgICBmaXRzLnB1c2goYmdPYmpbJ2JhY2tncm91bmQtZml0J10pO1xuICAgICAgICAgICAgb3BhY2l0aWVzLnB1c2gobm9kZS5jc3MoJ2JhY2tncm91bmQtb3BhY2l0eScpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNle1xuICAgICAgICB2YXIgaW5kZXggPSBpbWdzLmluZGV4T2YoYmdPYmpbJ2JhY2tncm91bmQtaW1hZ2UnXSk7XG4gICAgICAgIC8vIEFscmVhZHkgZXhpc3RzOyBNYWtlIG9wYWNpdHkgemVyb1xuICAgICAgICBpZiggaW5kZXggPiAtMSlcbiAgICAgICAgICAgIG9wYWNpdGllc1tpbmRleF0gPSAnMCc7XG4gICAgfVxuXG4gICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJywgaW1ncy5qb2luKFwiIFwiKSk7XG4gICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnLCB4UG9zLmpvaW4oXCIgXCIpKTtcbiAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teScsIHlQb3Muam9pbihcIiBcIikpO1xuICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC13aWR0aCcsIHdpZHRocy5qb2luKFwiIFwiKSk7XG4gICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWhlaWdodCcsIGhlaWdodHMuam9pbihcIiBcIikpO1xuICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1maXQnLCBmaXRzLmpvaW4oXCIgXCIpKTtcbiAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScsIG9wYWNpdGllcy5qb2luKFwiIFwiKSk7XG4gIH07XG5cbiAgLy8gU2VjdGlvbiBFbmRcbiAgLy8gU3R5bGVzaGVldCBoZWxwZXJzXG5cbiAgdmFyIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xuICB9O1xuXG4gIHZhciBnZXREZWZhdWx0Tm9kZVByb3BlcnRpZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2JvcmRlci13aWR0aCc6IDEuMjUsXG4gICAgICAnYm9yZGVyLWNvbG9yJzogJyM1NTU1NTUnLFxuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnI2ZmZmZmZicsXG4gICAgICAnYmFja2dyb3VuZC1vcGFjaXR5JzogMSxcbiAgICAgICdiYWNrZ3JvdW5kLWltYWdlLW9wYWNpdHknOiAxLFxuICAgICAgJ3RleHQtd3JhcCc6ICd3cmFwJ1xuICAgIH07XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHRFZGdlUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB7XG4gICAgICAnbGluZS1jb2xvcic6ICcjNTU1NTU1JyxcbiAgICAgICd3aWR0aCc6IDEuMjVcbiAgICB9O1xuICB9O1xuXG4gIHZhciBnZXREZWZhdWx0UHJvY2Vzc1NpemUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IDIwLFxuICAgICAgaGVpZ2h0OiAyMFxuICAgIH07XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHRMb2dpY2FsT3BlcmF0b3JTaXplID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiAzMCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9O1xuICB9O1xuXG4gIHZhciBnZXREZWZhdWx0QkFTaXplID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiA2MCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9O1xuICB9O1xuXG4gIHZhciBkZWZhdWx0U2lmRWRnZUNvbG9yTWFwID0ge1xuICAgICduZWlnaGJvci1vZic6ICcjRkMwMDJDJyxcbiAgICAnaW50ZXJhY3RzLXdpdGgnOiAnI0I1NzI2MScsXG4gICAgJ2luLWNvbXBsZXgtd2l0aCc6ICcjQjQ5ODdBJyxcbiAgICAnY29udHJvbHMtc3RhdGUtY2hhbmdlLW9mJzogJyNCNEUxQ0QnLFxuICAgICdjb250cm9scy10cmFuc3BvcnQtb2YnOiAnI0YwRTdDOCcsXG4gICAgJ2NvbnRyb2xzLXBob3NwaG9yeWxhdGlvbi1vZic6ICcjRDk3MEExJyxcbiAgICAnY2F0YWx5c2lzLXByZWNlZGVzJzogJyM4RUMzRUQnLFxuICAgICdjb250cm9scy1leHByZXNzaW9uLW9mJzogJyM2QTBGMzAnLFxuICAgICdjb25zdW1wdGlvbi1jb250cm9sZWQtYnknOiAnI0E5QTlGNycsXG4gICAgJ2NvbnRyb2xzLXByb2R1Y3Rpb24tb2YnOiAnIzJENTIwNycsXG4gICAgJ2NvbnRyb2xzLXRyYW5zcG9ydC1vZi1jaGVtaWNhbCc6ICcjM0YwMEZGJyxcbiAgICAnY2hlbWljYWwtYWZmZWN0cyc6ICcjRDk1RjIzJyxcbiAgICAncmVhY3RzLXdpdGgnOiAnIzRFMjE0QicsXG4gICAgJ3VzZWQtdG8tcHJvZHVjZSc6ICcjRkYyRjA3JyxcbiAgICAncGhvc3Bob3J5bGF0ZXMnOiAnIzQzQTkzQycsXG4gICAgJ2RlcGhvc3Bob3J5bGF0ZXMnOiAnI0NENEYzMicsXG4gICAgJ3VwcmVndWxhdGVzLWV4cHJlc3Npb24nOiAnIzQzQTkzQycsXG4gICAgJ2Rvd25yZWd1bGF0ZXMtZXhwcmVzc2lvbic6ICcjQ0Q0RjMyJyxcbiAgICAnYWN0aXZhdGVzJzogJyMzMkQ4NDknLFxuICAgICdpbmhpYml0cyc6ICcjNDg4NkE1JyxcbiAgICAnYWN0aXZhdGVzLWd0cGFzZSc6ICcjNDY4REUzJyxcbiAgICAnaW5oaWJpdHMtZ3RwYXNlJzogJyNDMzY0QkYnLFxuICAgICdhY2V0eWxhdGVzJzogJyM1NUIxQjYnLFxuICAgICdkZWFjZXR5bGF0ZXMnOiAnI0VFNUY3OCcsXG4gICAgJ21ldGh5bGF0ZXMnOiAnI0IwQjAzRCcsXG4gICAgJ2RlbWV0aHlsYXRlcyc6ICcjREI2RjIxJ1xuICB9O1xuXG4gIHZhciBkZWZhdWx0U2l6ZU1hcCA9IHtcbiAgICAnbWFjcm9tb2xlY3VsZSc6IHtcbiAgICAgIHdpZHRoOiA2MCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9LFxuICAgICdudWNsZWljIGFjaWQgZmVhdHVyZSc6IHtcbiAgICAgIHdpZHRoOiA2MCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9LFxuICAgICdzaW1wbGUgY2hlbWljYWwnOiB7XG4gICAgICB3aWR0aDogMzAsXG4gICAgICBoZWlnaHQ6IDMwXG4gICAgfSxcbiAgICAnZW1wdHkgc2V0Jzoge1xuICAgICAgd2lkdGg6IDIyLFxuICAgICAgaGVpZ2h0OiAyMlxuICAgIH0sXG4gICAgJ3BoZW5vdHlwZSc6IHtcbiAgICAgIHdpZHRoOiA2MCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9LFxuICAgICd1bnNwZWNpZmllZCBlbnRpdHknOiB7XG4gICAgICB3aWR0aDogNjAsXG4gICAgICBoZWlnaHQ6IDMwXG4gICAgfSxcbiAgICAncGVydHVyYmluZyBhZ2VudCc6IHtcbiAgICAgIHdpZHRoOiA2MCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9LFxuICAgICdjb21wbGV4Jzoge1xuICAgICAgd2lkdGg6IDQ0LFxuICAgICAgaGVpZ2h0OiA0NFxuICAgIH0sXG4gICAgJ2NvbXBhcnRtZW50Jzoge1xuICAgICAgd2lkdGg6IDgwLFxuICAgICAgaGVpZ2h0OiA4MFxuICAgIH0sXG4gICAgJ3N1Ym1hcCc6IHtcbiAgICAgIHdpZHRoOiA4MCxcbiAgICAgIGhlaWdodDogODBcbiAgICB9LFxuICAgICd0YWcnOiB7XG4gICAgICB3aWR0aDogMzUsXG4gICAgICBoZWlnaHQ6IDM1XG4gICAgfSxcbiAgICAnU0lGIG1hY3JvbW9sZWN1bGUnOiB7XG4gICAgICB3aWR0aDogNjAsXG4gICAgICBoZWlnaHQ6IDMwXG4gICAgfSxcbiAgICAnU0lGIHNpbXBsZSBjaGVtaWNhbCc6IHtcbiAgICAgIHdpZHRoOiAzMCxcbiAgICAgIGhlaWdodDogMzBcbiAgICB9LFxuICAgICd0b3BvbG9neSBncm91cCc6IHtcbiAgICAgIHdpZHRoOiA0NCxcbiAgICAgIGhlaWdodDogNDRcbiAgICB9XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5wcm9jZXNzVHlwZXMuZm9yRWFjaCggZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgLy8gcGhlbm90eXBlIGhhcyBhIGRpZmZlcmVudCBkZWZhdWx0IHNpemVcbiAgICBpZiAoIHR5cGUgPT0gJ3BoZW5vdHlwZScgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGVmYXVsdFNpemVNYXBbIHR5cGUgXSA9IGdldERlZmF1bHRQcm9jZXNzU2l6ZSgpO1xuICB9ICk7XG5cbiAgZWxlbWVudFV0aWxpdGllcy5sb2dpY2FsT3BlcmF0b3JUeXBlcy5mb3JFYWNoKCBmdW5jdGlvbiggdHlwZSApIHtcbiAgICBkZWZhdWx0U2l6ZU1hcFsgdHlwZSBdID0gZ2V0RGVmYXVsdExvZ2ljYWxPcGVyYXRvclNpemUoKTtcbiAgfSApO1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuYmlvbG9naWNhbEFjdGl2aXR5VHlwZXMuZm9yRWFjaCggZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgZGVmYXVsdFNpemVNYXBbIHR5cGUgXSA9IGdldERlZmF1bHRCQVNpemUoKTtcbiAgfSApO1xuXG4gIHZhciBnZXREZWZhdWx0U2l6ZSA9IGZ1bmN0aW9uKCB0eXBlICkge1xuICAgIHJldHVybiBkZWZhdWx0U2l6ZU1hcFsgdHlwZSBdO1xuICB9O1xuXG4gIHZhciBnZXREZWZhdWx0Rm9udFByb3BlcnRpZXMgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2ZvbnQtc2l6ZSc6IDExLFxuICAgICAgJ2ZvbnQtZmFtaWx5JzogJ0hlbHZldGljYScsXG4gICAgICAnZm9udC1zdHlsZSc6ICdub3JtYWwnLFxuICAgICAgJ2ZvbnQtd2VpZ2h0JzogJ25vcm1hbCcsXG4gICAgICAnY29sb3InOiAnIzAwMCdcbiAgICB9O1xuICB9O1xuXG4gIHZhciBnZXREZWZhdWx0SW5mb2JveFByb3BlcnRpZXMgPSBmdW5jdGlvbiggbm9kZUNsYXNzLCBpbmZvYm94VHlwZSApIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2ZvbnQtc2l6ZSc6IGdldERlZmF1bHRJbmZvYm94Rm9udFNpemUoIG5vZGVDbGFzcywgaW5mb2JveFR5cGUgKSxcbiAgICAgICdmb250LWZhbWlseSc6ICdBcmlhbCcsXG4gICAgICAnZm9udC1zdHlsZSc6ICdub3JtYWwnLFxuICAgICAgJ2ZvbnQtd2VpZ2h0JzogJ25vcm1hbCcsXG4gICAgICAnZm9udC1jb2xvcic6ICcjMGYwZjBmJyxcbiAgICAgICdib3JkZXItd2lkdGgnOiAxLFxuICAgICAgJ2JvcmRlci1jb2xvcic6ICcjNTU1NTU1JyxcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyNmZmZmZmYnLFxuICAgICAgJ3NoYXBlLW5hbWUnOiBnZXREZWZhdWx0SW5mb2JveFNoYXBlTmFtZSggbm9kZUNsYXNzLCBpbmZvYm94VHlwZSApLFxuICAgICAgJ3dpZHRoJzogZ2V0RGVmYXVsdEluZm9ib3hTaXplKCBub2RlQ2xhc3MsIGluZm9ib3hUeXBlICkudyxcbiAgICAgICdoZWlnaHQnOiBnZXREZWZhdWx0SW5mb2JveFNpemUoIG5vZGVDbGFzcywgaW5mb2JveFR5cGUgKS5oXG4gICAgfTtcbiAgfTtcblxuICB2YXIgZ2V0RGVmYXVsdEluZm9ib3hGb250U2l6ZSA9IGZ1bmN0aW9uKCBub2RlQ2xhc3MsIGluZm9ib3hUeXBlICkge1xuICAgIHZhciBmb250c2l6ZSA9IDk7XG5cbiAgICBpZiAoIG5vZGVDbGFzcyA9PT0gJ1NJRiBtYWNyb21vbGVjdWxlJyB8fCBub2RlQ2xhc3MgPT09ICdTSUYgc2ltcGxlIGNoZW1pY2FsJyApIHtcbiAgICAgIGZvbnRzaXplID0gMTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvbnRzaXplO1xuICB9O1xuXG4gIHZhciBnZXREZWZhdWx0SW5mb2JveFNpemUgPSBmdW5jdGlvbiggbm9kZUNsYXNzLCBpbmZvYm94VHlwZSApIHtcbiAgICB2YXIgdyA9IDEyLCBoID0gMTI7XG5cbiAgICBpZiAoIG5vZGVDbGFzcyA9PT0gJ1NJRiBtYWNyb21vbGVjdWxlJyB8fCBub2RlQ2xhc3MgPT09ICdTSUYgc2ltcGxlIGNoZW1pY2FsJyApIHtcbiAgICAgIHcgPSAxNTtcbiAgICAgIGggPSAxNTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB3LCBoIH07XG4gIH07XG5cbiAgdmFyIGdldERlZmF1bHRJbmZvYm94U2hhcGVOYW1lID0gZnVuY3Rpb24oIG5vZGVDbGFzcywgaW5mb2JveFR5cGUgKSB7XG4gICAgaWYgKCBpbmZvYm94VHlwZSA9PT0gJ3N0YXRlIHZhcmlhYmxlJyApIHtcbiAgICAgIHJldHVybiAnc3RhZGl1bSc7XG4gICAgfVxuXG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzU0lGTm9kZSggbm9kZUNsYXNzICkgKSB7XG4gICAgICBpZiAoIGluZm9ib3hUeXBlID09PSAndW5pdCBvZiBpbmZvcm1hdGlvbicgKSB7XG4gICAgICAgIGlmICggbm9kZUNsYXNzID09ICdTSUYgbWFjcm9tb2xlY3VsZScgKSB7XG4gICAgICAgICAgcmV0dXJuICdzdGFkaXVtJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3JlY3RhbmdsZSc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIGxpc3QgPSBlbGVtZW50VXRpbGl0aWVzLmdldFVuaXRPZkluZm9TaGFwZU9wdGlvbnMoIG5vZGVDbGFzcyApO1xuICAgICAgcmV0dXJuIGxpc3RbIDAgXTtcbiAgICB9XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5ub2RlVHlwZXMuZm9yRWFjaCggZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgZGVmYXVsdFByb3BlcnRpZXNbIHR5cGUgXSA9ICQuZXh0ZW5kKCB7fSwgZ2V0RGVmYXVsdE5vZGVQcm9wZXJ0aWVzKCksIGdldERlZmF1bHRTaXplKCB0eXBlICkgKTtcbiAgICBpZiAoZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlU3RhdGVWYXJpYWJsZSggdHlwZSApKSB7XG4gICAgICB2YXIgcHJvcHMgPSBnZXREZWZhdWx0SW5mb2JveFByb3BlcnRpZXMoIHR5cGUsICdzdGF0ZSB2YXJpYWJsZScgKTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzWyB0eXBlIF1bICdzdGF0ZSB2YXJpYWJsZScgXSA9IHByb3BzO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlVW5pdE9mSW5mb3JtYXRpb24oIHR5cGUgKSkge1xuICAgICAgdmFyIHByb3BzID0gZ2V0RGVmYXVsdEluZm9ib3hQcm9wZXJ0aWVzKCB0eXBlLCAndW5pdCBvZiBpbmZvcm1hdGlvbicgKTtcbiAgICAgIGRlZmF1bHRQcm9wZXJ0aWVzWyB0eXBlIF1bICd1bml0IG9mIGluZm9ybWF0aW9uJyBdID0gcHJvcHM7XG4gICAgfVxuICB9ICk7XG5cbiAgZWxlbWVudFV0aWxpdGllcy5jb21wb3VuZE5vZGVUeXBlcy5mb3JFYWNoKCBmdW5jdGlvbiggdHlwZSApIHtcbiAgICBkZWZhdWx0UHJvcGVydGllc1sgdHlwZSBdID0gJC5leHRlbmQoIGRlZmF1bHRQcm9wZXJ0aWVzWyB0eXBlIF0sIHtcbiAgICAgICdiYWNrZ3JvdW5kLW9wYWNpdHknOiAwLjVcbiAgICB9ICk7XG4gIH0gKTtcblxuICAkLmV4dGVuZCggZGVmYXVsdFByb3BlcnRpZXNbJ2Fzc29jaWF0aW9uJ10sIHtcbiAgICAnYmFja2dyb3VuZC1jb2xvcic6ICcjNzA3MDcwJ1xuICB9ICk7XG5cbiAgZWxlbWVudFV0aWxpdGllcy5lcG5UeXBlc1xuICAgIC5jb25jYXQoIGVsZW1lbnRVdGlsaXRpZXMuc2lmVHlwZXMgKVxuICAgIC5jb25jYXQoIGVsZW1lbnRVdGlsaXRpZXMub3RoZXJOb2RlVHlwZXMgKVxuICAgIC5jb25jYXQgKGVsZW1lbnRVdGlsaXRpZXMuYmlvbG9naWNhbEFjdGl2aXR5VHlwZXMpXG4gICAgLmNvbmNhdCggWydwaGVub3R5cGUnXSApXG4gICAgLmZvckVhY2goIGZ1bmN0aW9uKCB0eXBlICkge1xuICAgICAgICQuZXh0ZW5kKCBkZWZhdWx0UHJvcGVydGllc1sgdHlwZSBdLCBnZXREZWZhdWx0Rm9udFByb3BlcnRpZXMoKSApO1xuICAgIH0gKTtcblxuICAkLmV4dGVuZCggZGVmYXVsdFByb3BlcnRpZXNbJ3N1Ym1hcCddLCB7XG4gICAgJ2ZvbnQtc2l6ZSc6IDE0LFxuICAgICdib3JkZXItd2lkdGgnOiAyLjI1XG4gIH0gKTtcblxuICAkLmV4dGVuZCggZGVmYXVsdFByb3BlcnRpZXNbJ2NvbXBhcnRtZW50J10sIHtcbiAgICAnZm9udC1zaXplJzogMTQsXG4gICAgJ2JvcmRlci13aWR0aCc6IDMuMjVcbiAgfSApO1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZWRnZVR5cGVzLmZvckVhY2goIGZ1bmN0aW9uKCB0eXBlICkge1xuICAgIGRlZmF1bHRQcm9wZXJ0aWVzWyB0eXBlIF0gPSBnZXREZWZhdWx0RWRnZVByb3BlcnRpZXMoKTtcblxuICAgIGlmICggZGVmYXVsdFNpZkVkZ2VDb2xvck1hcFsgdHlwZSBdICkge1xuICAgICAgZGVmYXVsdFByb3BlcnRpZXNbIHR5cGUgXVsgJ2xpbmUtY29sb3InIF0gPSBkZWZhdWx0U2lmRWRnZUNvbG9yTWFwWyB0eXBlIF07XG4gICAgfVxuICB9ICk7XG5cbiAgZnVuY3Rpb24gZ2V0UHJvcCggcHJvcHMsIG5hbWUgKSB7XG4gICAgdmFyIHByb3AgPSBwcm9wc1sgbmFtZSBdO1xuXG4gICAgaWYgKCB0eXBlb2YgcHJvcCAhPT0gbnVsbCAmJiB0eXBlb2YgcHJvcCA9PT0gJ29iamVjdCcgKSB7XG4gICAgICByZXR1cm4gJC5leHRlbmQoIHt9LCBwcm9wICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3A7XG4gIH1cblxuICBmdW5jdGlvbiBleHRlbmREYXRhV2l0aENsYXNzRGVmYXVsdHMoIGRhdGEsIGNsYXNzTmFtZSwgcHJvcHNUb1NraXAgKSB7XG4gICAgaWYgKCAhY2xhc3NOYW1lICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBjbGFzc05hbWUgKTtcblxuICAgIE9iamVjdC5rZXlzKCBkZWZhdWx0UHJvcHMgKS5mb3JFYWNoKCBmdW5jdGlvbiggbmFtZSApIHtcbiAgICAgIGlmICggIXByb3BzVG9Ta2lwIHx8ICFwcm9wc1RvU2tpcFsgbmFtZSBdICkge1xuICAgICAgICBkYXRhWyBuYW1lIF0gPSBnZXRQcm9wKCBkZWZhdWx0UHJvcHMsIG5hbWUgKTtcbiAgICAgIH1cbiAgICB9ICk7XG4gIH1cblxuICBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZE5vZGVEYXRhV2l0aENsYXNzRGVmYXVsdHMgPSBmdW5jdGlvbiggZGF0YSwgY2xhc3NOYW1lICkge1xuICAgIC8vIGxpc3Qgb2YgcHJvcGVydGllcyB0byBza2lwXG4gICAgdmFyIHByb3BzVG9Ta2lwID0ge1xuICAgICAgJ3dpZHRoJzogdHJ1ZSxcbiAgICAgICdoZWlnaHQnOiB0cnVlLFxuICAgICAgJ3N0YXRlIHZhcmlhYmxlJzogdHJ1ZSxcbiAgICAgICd1bml0IG9mIGluZm9ybWF0aW9uJzogdHJ1ZSxcbiAgICAgICdtdWx0aW1lcic6IHRydWUsXG4gICAgICAnY2xvbmVtYXJrZXInOiB0cnVlLFxuICAgICAgJ3BvcnRzLW9yZGVyaW5nJzogdHJ1ZVxuICAgIH07XG5cbiAgICBleHRlbmREYXRhV2l0aENsYXNzRGVmYXVsdHMoIGRhdGEsIGNsYXNzTmFtZSwgcHJvcHNUb1NraXAgKTtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZEVkZ2VEYXRhV2l0aENsYXNzRGVmYXVsdHMgPSBmdW5jdGlvbiggZGF0YSwgY2xhc3NOYW1lICkge1xuICAgIGV4dGVuZERhdGFXaXRoQ2xhc3NEZWZhdWx0cyggZGF0YSwgY2xhc3NOYW1lICk7XG4gIH1cblxuICAvLyBnZXQgaW5mb2JveCBwcm9wZXJ0aWVzIGFuZCBmaWx0ZXIgdGhlIG9uZXMgcmVsYXRlZCB0byBzdHlsZSBvbmx5XG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdEluZm9ib3hTdHlsZSA9IGZ1bmN0aW9uKCBub2RlQ2xhc3MsIGluZm9ib3hUeXBlICkge1xuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKCBub2RlQ2xhc3MgKTtcbiAgICB2YXIgaW5mb2JveFN0eWxlID0gJC5leHRlbmQoIHt9LCBkZWZhdWx0UHJvcHNbIGluZm9ib3hUeXBlIF0gKTtcblxuICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgYXJlIGJlbG9uZ2luZyB0byBiYm94IG9iamVjdCByYXRoZXIgdGhhbiBzdHlsZSBvYmplY3RcbiAgICB2YXIgbm9uU3R5bGVQcm9wcyA9IFsgJ3dpZHRoJywgJ2hlaWdodCcgXTtcblxuICAgIG5vblN0eWxlUHJvcHMuZm9yRWFjaCggZnVuY3Rpb24oIHByb3BOYW1lICkge1xuICAgICAgZGVsZXRlIGluZm9ib3hTdHlsZVsgcHJvcE5hbWUgXTtcbiAgICB9ICk7XG5cbiAgICByZXR1cm4gaW5mb2JveFN0eWxlO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMgPSBmdW5jdGlvbiggc2JnbmNsYXNzICkge1xuICAgIGlmICggc2JnbmNsYXNzID09IHVuZGVmaW5lZCApIHtcbiAgICAgIHJldHVybiBkZWZhdWx0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICB2YXIgcHVyZUNsYXNzID0gZWxlbWVudFV0aWxpdGllcy5nZXRQdXJlU2JnbkNsYXNzKCBzYmduY2xhc3MgKTtcblxuICAgIC8vIGluaXQgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciB0aGUgY2xhc3MgaWYgbm90IGluaXRpYWxpemVkIHlldFxuICAgIGlmICggZGVmYXVsdFByb3BlcnRpZXNbIHB1cmVDbGFzcyBdID09IG51bGwgKSB7XG4gICAgICBkZWZhdWx0UHJvcGVydGllc1sgcHVyZUNsYXNzIF0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmYXVsdFByb3BlcnRpZXNbIHB1cmVDbGFzcyBdO1xuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuc2V0RGVmYXVsdFByb3BlcnRpZXMgPSBmdW5jdGlvbiggc2JnbmNsYXNzLCBwcm9wcyApIHtcbiAgICAkLmV4dGVuZCggZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyggc2JnbmNsYXNzICksIHByb3BzICk7XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5sb2NrR3JhcGhUb3BvbG9neSA9IGZ1bmN0aW9uKCkge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuZ3JhcGhUb3BvbG9neUxvY2tlZCA9IHRydWU7XG4gICAgaWYgKCBjeS5leHBhbmRDb2xsYXBzZSApIHtcbiAgICAgIGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKS5kaXNhYmxlQ3VlKCk7XG4gICAgfVxuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMudW5sb2NrR3JhcGhUb3BvbG9neSA9IGZ1bmN0aW9uKCkge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMuZ3JhcGhUb3BvbG9neUxvY2tlZCA9IGZhbHNlO1xuICAgIGlmICggY3kuZXhwYW5kQ29sbGFwc2UgKSB7XG4gICAgICBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0JykuZW5hYmxlQ3VlKCk7XG4gICAgfVxuICB9O1xuXG4gIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ3JhcGhUb3BvbG9neUxvY2tlZDtcbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLmxhbmd1YWdlVG9NYXBUeXBlID0gZnVuY3Rpb24obGFuZykge1xuICAgIHN3aXRjaCAobGFuZykge1xuICAgICAgY2FzZSAncHJvY2VzcyBkZXNjcmlwdGlvbic6XG4gICAgICAgIHJldHVybiAnUEQnO1xuICAgICAgY2FzZSAnYWN0aXZpdHkgZmxvdyc6XG4gICAgICAgIHJldHVybiAnQUYnO1xuICAgICAgY2FzZSAnc2lmJzpcbiAgICAgICAgcmV0dXJuICdTSUYnO1xuICAgICAgY2FzZSAnaHlicmlkIHNiZ24nOlxuICAgICAgICByZXR1cm4gJ0h5YnJpZFNiZ24nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdIeWJyaWRBbnknO1xuICAgIH1cbiAgfTtcblxuICBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGVUb0xhbmd1YWdlID0gZnVuY3Rpb24obWFwVHlwZSkge1xuICAgIHN3aXRjaCAobWFwVHlwZSkge1xuICAgICAgY2FzZSAnUEQnOlxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3MgZGVzY3JpcHRpb24nO1xuICAgICAgY2FzZSAnQUYnOlxuICAgICAgICByZXR1cm4gJ2FjdGl2aXR5IGZsb3cnO1xuICAgICAgY2FzZSAnU0lGJzpcbiAgICAgICAgcmV0dXJuICdzaWYnO1xuICAgICAgY2FzZSAnSHlicmlkU2Jnbic6XG4gICAgICAgIHJldHVybiAnaHlicmlkIHNiZ24nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdoeWJyaWQgYW55JztcbiAgICB9XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRBbGxDb2xsYXBzZWRDaGlsZHJlblJlY3Vyc2l2ZWx5ID0gZnVuY3Rpb24obm9kZXMpIHtcbiAgICB2YXIgZXhwYW5kQ29sbGFwc2UgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XG4gICAgdmFyIGNvbGxhcHNlZENoaWxkcmVuID0gY3kuY29sbGVjdGlvbigpO1xuICAgIHZhciBjb2xsYXBzZWROb2RlcyA9IG5vZGVzLmZpbHRlcihcIi5jeS1leHBhbmQtY29sbGFwc2UtY29sbGFwc2VkLW5vZGVcIik7XG4gICAgY29sbGFwc2VkTm9kZXMuZm9yRWFjaCggZnVuY3Rpb24oIG4gKSB7XG4gICAgICBjb2xsYXBzZWRDaGlsZHJlbiA9IGNvbGxhcHNlZENoaWxkcmVuLnVuaW9uKGV4cGFuZENvbGxhcHNlLmdldENvbGxhcHNlZENoaWxkcmVuUmVjdXJzaXZlbHkobikpO1xuICAgIH0gKTtcbiAgICByZXR1cm4gY29sbGFwc2VkQ2hpbGRyZW47XG4gIH07XG5cbiAgZWxlbWVudFV0aWxpdGllcy5nZXRXaWR0aEJ5Q29udGVudCA9IGZ1bmN0aW9uKCBjb250ZW50LCBmb250RmFtaWx5LCBmb250U2l6ZSwgb3B0aW9ucyApIHtcbiAgICByZXR1cm4gdGV4dFV0aWxpdGllcy5nZXRXaWR0aEJ5Q29udGVudCggY29udGVudCwgZm9udEZhbWlseSwgZm9udFNpemUsIG9wdGlvbnMgKTtcbiAgfTtcblxuICByZXR1cm4gZWxlbWVudFV0aWxpdGllcztcbn1cbiIsIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjeTtcbiAgdmFyIHBhcnNlZERhdGFNYXA7XG4gIHZhciB2aXNpYmxlRGF0YU1hcEJ5RXhwO1xuICB2YXIgZ3JvdXBlZERhdGFNYXA7XG4gIHZhciB2aXNpYmxlRmlsZXM7XG4gIHZhciBjb2xvck1hcDtcbiAgdmFyIGFsbFZpcztcbiAgdmFyIGZpbGVEZXNjcmlwdGlvbjtcbiAgdmFyIGZpbGVUaXRsZTtcbiAgZnVuY3Rpb24gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkocGFyYW0pIHtcbiAgICAvLyBJbml0XG4gICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICAgIHBhcnNlZERhdGFNYXAgPSB7fTtcbiAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwID0ge307XG4gICAgdmlzaWJsZUZpbGVzID0ge307XG4gICAgZ3JvdXBlZERhdGFNYXAgPSB7fTtcbiAgICBjb2xvck1hcCA9IHt9O1xuICAgIGFsbFZpcyA9IHRydWU7XG5cbiAgICBmaWxlRGVzY3JpcHRpb24gPSB7fTtcbiAgICBmaWxlVGl0bGUgPSB7fTtcbiAgfVxuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmdldE5hbWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZuYW1lO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmdldERlc2MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZkZXNjO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmdldEdyb3VwZWREYXRhTWFwID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBncm91cGVkRGF0YU1hcDtcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5nZXRQYXJzZWREYXRhTWFwID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwYXJzZWREYXRhTWFwO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmdldFZpc2libGVEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB2aXNpYmxlRGF0YU1hcEJ5RXhwO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmhpZGVBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGludmlzaWJsZUV4cCA9IHt9O1xuICAgIHZhciBpbnZpc2libGVGaWxlID0ge307XG4gICAgYWxsVmlzID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBpIGluIGdyb3VwZWREYXRhTWFwKSB7XG4gICAgICBpZiAodmlzaWJsZUZpbGVzW2ldKSB7XG4gICAgICAgIHZpc2libGVGaWxlc1tpXSA9IGZhbHNlO1xuICAgICAgICBpbnZpc2libGVGaWxlW2ldID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGZpbGVOYW1lIGluIGdyb3VwZWREYXRhTWFwKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXS5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBleHBOYW1lID0gZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdW2pdO1xuICAgICAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID09IHVuZGVmaW5lZClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9PSB0cnVlKSB7XG4gICAgICAgICAgaW52aXNpYmxlRXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSBmYWxzZTtcbiAgICAgICAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2hvd0RhdGEoKTtcbiAgICBwYXJhbXMgPSB7aW52aXNpYmxlRmlsZSwgaW52aXNpYmxlRXhwfTtcbiAgICByZXR1cm4gcGFyYW1zO1xuXG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaGlkZUFsbFVuZG8gPSBmdW5jdGlvbiAoaW52aXNpYmxlRmlsZSwgaW52aXNpYmxlRXhwKSB7XG4gICAgZm9yIChsZXQgaiBpbiBpbnZpc2libGVGaWxlKSB7XG4gICAgICB2aXNpYmxlRmlsZXNbal0gPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGxldCBqIGluIGludmlzaWJsZUV4cCkge1xuICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cFtqXSA9IHRydWU7XG4gICAgfVxuICAgIGFsbFZpcyA9IHRydWU7XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHJldHVybjtcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS51bmhpZGVBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZpc2libGVFeHAgPSB7fTtcbiAgICB2YXIgdmlzaWJsZUZpbGUgPSB7fTtcbiAgICBhbGxWaXMgPSB0cnVlO1xuICAgIGZvciAobGV0IGkgaW4gdmlzaWJsZUZpbGVzKSB7XG4gICAgICBpZiAoIXZpc2libGVGaWxlc1tpXSkge1xuICAgICAgICB2aXNpYmxlRmlsZXNbaV0gPSB0cnVlO1xuICAgICAgICB2aXNpYmxlRmlsZVtpXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGZpbGVOYW1lIGluIGdyb3VwZWREYXRhTWFwKSB7XG4gICAgICBpZiAoZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdID09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXS5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCBleHBOYW1lID0gZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdW2pdO1xuICAgICAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID09IHVuZGVmaW5lZClcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9PSBmYWxzZSkge1xuICAgICAgICAgIHZpc2libGVFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IHRydWU7XG4gICAgICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuIHt2aXNpYmxlRXhwLCB2aXNpYmxlRmlsZX07XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkudW5oaWRlQWxsVW5kbyA9IGZ1bmN0aW9uICh2aXNpYmxlRmlsZSwgdmlzaWJsZUV4cCkge1xuICAgIGZvciAobGV0IGogaW4gdmlzaWJsZUZpbGUpIHtcbiAgICAgIHZpc2libGVGaWxlc1tqXSA9IGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGxldCBqIGluIHZpc2libGVFeHApIHtcbiAgICAgIHZpc2libGVEYXRhTWFwQnlFeHBbal0gPSBmYWxzZTtcbiAgICB9XG4gICAgYWxsVmlzID0gZmFsc2U7XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHJldHVybjtcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5yZW1vdmVBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcnNlZCA9IHt9O1xuICAgIHZhciB2aXNpYmxlID0ge307XG4gICAgdmFyIGdyb3VwZWQgPSB7fTtcbiAgICB2YXIgdmlzaWJsZWYgPSB7fTtcblxuICAgIGZvciAobGV0IGkgaW4gcGFyc2VkRGF0YU1hcCkge1xuICAgICAgaWYgKCFwYXJzZWRbaV0pIHtcbiAgICAgICAgcGFyc2VkW2ldID0ge307XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqIGluIHBhcnNlZERhdGFNYXBbaV0pIHtcbiAgICAgICAgcGFyc2VkW2ldW2pdID0gcGFyc2VkRGF0YU1hcFtpXVtqXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSBpbiB2aXNpYmxlRGF0YU1hcEJ5RXhwKSB7XG4gICAgICB2aXNpYmxlW2ldID0gdmlzaWJsZURhdGFNYXBCeUV4cFtpXTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpIGluIHZpc2libGVGaWxlcykge1xuICAgICAgdmlzaWJsZWZbaV0gPSB2aXNpYmxlRmlsZXNbaV07XG4gICAgfVxuICAgIGZvciAobGV0IGkgaW4gZ3JvdXBlZERhdGFNYXApIHtcbiAgICAgIGlmICghZ3JvdXBlZFtpXSkge1xuICAgICAgICBncm91cGVkW2ldID0gW107XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqIGluIGdyb3VwZWREYXRhTWFwW2ldKSB7XG4gICAgICAgIGdyb3VwZWRbaV0ucHVzaChncm91cGVkRGF0YU1hcFtpXVtqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnNlZERhdGFNYXAgPSB7fTtcbiAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwID0ge307XG4gICAgdmlzaWJsZUZpbGVzID0ge307XG4gICAgZ3JvdXBlZERhdGFNYXAgPSB7fTtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcGFyYW1zID0ge3BhcnNlZCwgdmlzaWJsZSwgZ3JvdXBlZCwgdmlzaWJsZWZ9O1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkucmVzdG9yZUFsbCA9IGZ1bmN0aW9uIChwYXJzZWQsIHZpc2libGUsIGdyb3VwZWQsIHZpc2libGVmKSB7XG4gICAgcGFyc2VkRGF0YU1hcCA9IHBhcnNlZDtcbiAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwID0gdmlzaWJsZTtcbiAgICBncm91cGVkRGF0YU1hcCA9IGdyb3VwZWQ7XG4gICAgdmlzaWJsZUZpbGVzID0gdmlzaWJsZWY7XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHBhcmFtID0ge307XG4gICAgcmV0dXJuIHBhcmFtO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmFkZEV4cCA9IGZ1bmN0aW9uIChmaWxlTmFtZSwgZXhwTmFtZSwgaXNWaXNpYmxlLCB2YWx1ZXMsIGdyb3VwQXJyYXkpIHtcbiAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSBpc1Zpc2libGU7XG4gICAgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdID0gZ3JvdXBBcnJheTtcblxuICAgIGZvciAobGV0IGkgaW4gdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWVzW2ldW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gIT0gdW5kZWZpbmVkKVxuICAgICAgICBwYXJzZWREYXRhTWFwW2ldW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSB2YWx1ZXNbaV1bZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXTtcbiAgICB9XG5cbiAgICB2YXIgcGFyYW1zID0ge2ZpbGVOYW1lLCBleHBOYW1lfTtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5hZGRGaWxlID0gZnVuY3Rpb24gKGZpbGVOYW1lLCBwYXJzZWQsIHZpc2libGUsIGdyb3VwZWQsIHZpc2libGVmKSB7XG4gICAgcGFyc2VkRGF0YU1hcCA9IHBhcnNlZDtcbiAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwID0gdmlzaWJsZTtcbiAgICBncm91cGVkRGF0YU1hcCA9IGdyb3VwZWQ7XG4gICAgdmlzaWJsZUZpbGVzID0gdmlzaWJsZWY7XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHBhcmFtID0ge2ZpbGVOYW1lfTtcbiAgICByZXR1cm4gcGFyYW07XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkucmVtb3ZlRXhwID0gZnVuY3Rpb24gKGZpbGVOYW1lLCBleHBOYW1lKSB7XG4gICAgdmFyIGlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHZhciB2YWx1ZXMgPSB7fTtcbiAgICB2YXIgZ3JvdXBBcnJheSA9IFtdO1xuXG4gICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGlzVmlzaWJsZSA9IHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXTtcbiAgICAgIGRlbGV0ZSB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV07XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAobGV0IGkgaW4gZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdKSB7XG4gICAgICAgIGdyb3VwQXJyYXlbaV0gPSBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV1baV07XG4gICAgICB9XG4gICAgICAvL2dyb3VwQXJyYXkgPSBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV07XG4gICAgICB2YXIgaW5kZXggPSBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0uaW5kZXhPZihleHBOYW1lKTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIGRlbGV0ZSBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV1baW5kZXhdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgaW4gcGFyc2VkRGF0YU1hcCkge1xuICAgICAgaWYgKHBhcnNlZERhdGFNYXBbaV1bZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKCEoaSBpbiB2YWx1ZXMpKSB7XG4gICAgICAgICAgdmFsdWVzW2ldID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzW2ldW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSBwYXJzZWREYXRhTWFwW2ldW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV07XG4gICAgICAgIGRlbGV0ZSBwYXJzZWREYXRhTWFwW2ldW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXSAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXVtpXSlcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKGNvdW50ID09IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXS5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFyYW1zID0ge2ZpbGVOYW1lLCBleHBOYW1lLCBpc1Zpc2libGUsIHZhbHVlcywgZ3JvdXBBcnJheX07XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkucmVtb3ZlRmlsZSA9IGZ1bmN0aW9uIChmaWxlTmFtZSkge1xuICAgIGlmIChncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHBhcnNlZCA9IHt9O1xuICAgIHZhciB2aXNpYmxlID0ge307XG4gICAgdmFyIGdyb3VwZWQgPSB7fTtcbiAgICB2YXIgdmlzaWJsZWYgPSB7fTtcblxuICAgIGZvciAobGV0IGkgaW4gcGFyc2VkRGF0YU1hcCkge1xuICAgICAgaWYgKCFwYXJzZWRbaV0pIHtcbiAgICAgICAgcGFyc2VkW2ldID0ge307XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqIGluIHBhcnNlZERhdGFNYXBbaV0pIHtcbiAgICAgICAgcGFyc2VkW2ldW2pdID0gcGFyc2VkRGF0YU1hcFtpXVtqXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgaSBpbiB2aXNpYmxlRGF0YU1hcEJ5RXhwKSB7XG4gICAgICB2aXNpYmxlW2ldID0gdmlzaWJsZURhdGFNYXBCeUV4cFtpXTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSBpbiB2aXNpYmxlRmlsZXMpIHtcbiAgICAgIHZpc2libGVmW2ldID0gdmlzaWJsZUZpbGVzW2ldO1xuICAgIH1cbiAgICBmb3IgKGxldCBpIGluIGdyb3VwZWREYXRhTWFwKSB7XG4gICAgICBpZiAoIWdyb3VwZWRbaV0pIHtcbiAgICAgICAgZ3JvdXBlZFtpXSA9IFtdO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaiBpbiBncm91cGVkRGF0YU1hcFtpXSkge1xuICAgICAgICBncm91cGVkW2ldLnB1c2goZ3JvdXBlZERhdGFNYXBbaV1bal0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBleHBOYW1lID0gZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdW2pdO1xuICAgICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSAhPSB1bmRlZmluZWQpXG4gICAgICAgIGRlbGV0ZSB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV07XG4gICAgICBmb3IgKGxldCBpIGluIHBhcnNlZERhdGFNYXApIHtcbiAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFNYXBbaV1bZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgZGVsZXRlIGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXTtcblxuICAgIHZhciBwYXJhbXMgPSB7ZmlsZU5hbWUsIHBhcnNlZCwgdmlzaWJsZSwgZ3JvdXBlZCwgdmlzaWJsZWZ9O1xuICAgIHRoaXMuc2hvd0RhdGEoKTtcbiAgICB2YXIgayA9IDA7XG4gICAgZm9yIChsZXQgaSBpbiBncm91cGVkRGF0YU1hcClcbiAgICB7XG4gICAgICBrKys7XG4gICAgfVxuICAgIGlmIChrID09IDApIHtcbiAgICAgIGdyb3VwZWREYXRhTWFwID0ge307XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaGlkZUV4cCA9IGZ1bmN0aW9uIChmaWxlTmFtZSwgZXhwTmFtZSkge1xuICAgIGlmICh2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuO1xuICAgIHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IGZhbHNlO1xuICAgIHBhcmFtcyA9IHtmaWxlTmFtZSwgZXhwTmFtZX07XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5oaWRlRmlsZSA9IGZ1bmN0aW9uIChmaWxlTmFtZSkge1xuICAgIHZpc2libGVGaWxlc1tmaWxlTmFtZV0gPSBmYWxzZTtcbiAgICB2YXIgaW52aXNpYmxlID0ge307XG4gICAgaWYgKGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGV4cE5hbWUgPSBncm91cGVkRGF0YU1hcFtmaWxlTmFtZV1bal07XG4gICAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID09IHVuZGVmaW5lZClcbiAgICAgICAgY29udGludWU7XG4gICAgICBpZiAodmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID09IHRydWUpIHtcbiAgICAgICAgaW52aXNpYmxlW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPSBmYWxzZTtcbiAgICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHBhcmFtcyA9IHtmaWxlTmFtZSwgaW52aXNpYmxlfTtcbiAgICByZXR1cm4gcGFyYW1zO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmhpZGVGaWxlVW5kbyA9IGZ1bmN0aW9uIChmaWxlTmFtZSwgaW52aXNpYmxlKSB7XG4gICAgaWYgKHZpc2libGVGaWxlc1tmaWxlTmFtZV0gIT0gdW5kZWZpbmVkKVxuICAgICAgdmlzaWJsZUZpbGVzW2ZpbGVOYW1lXSA9IHRydWU7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuO1xuICAgIGZvciAobGV0IGogaW4gaW52aXNpYmxlKSB7XG4gICAgICB2aXNpYmxlRGF0YU1hcEJ5RXhwW2pdID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHJldHVybiB7ZmlsZU5hbWV9O1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnVuaGlkZUV4cCA9IGZ1bmN0aW9uIChmaWxlTmFtZSwgZXhwTmFtZSkge1xuICAgIGlmICh2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuO1xuICAgIHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSA9IHRydWU7XG4gICAgcGFyYW1zID0ge2ZpbGVOYW1lLCBleHBOYW1lfTtcbiAgICB0aGlzLnNob3dEYXRhKCk7XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS51bmhpZGVGaWxlID0gZnVuY3Rpb24gKGZpbGVOYW1lKSB7XG4gICAgdmFyIHZpc2libGUgPSB7fTtcbiAgICB2aXNpYmxlRmlsZXNbZmlsZU5hbWVdID0gdHJ1ZTtcbiAgICBpZiAoZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXS5sZW5ndGg7IGorKykge1xuICAgICAgY29uc3QgZXhwTmFtZSA9IGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXVtqXTtcbiAgICAgIGlmICh2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPT0gdW5kZWZpbmVkKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIGlmICh2aXNpYmxlRGF0YU1hcEJ5RXhwW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0gPT0gZmFsc2UpIHtcbiAgICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cFtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgdmlzaWJsZVtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHBhcmFtcyA9IHtmaWxlTmFtZSwgdmlzaWJsZX07XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS51bmhpZGVGaWxlVW5kbyA9IGZ1bmN0aW9uIChmaWxlTmFtZSwgdmlzaWJsZSkge1xuICAgIHZpc2libGVGaWxlc1tmaWxlTmFtZV0gPSBmYWxzZTtcbiAgICBmb3IgKGxldCBqIGluIHZpc2libGUpIHtcbiAgICAgIHZpc2libGVEYXRhTWFwQnlFeHBbal0gPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHJldHVybiB7ZmlsZU5hbWV9O1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmNvdW50VmlzaWJsZURhdGFCeUV4cCA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBDb3VudCB0aGUgZ2Vub21pYyBkYXRhIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgb24gbm9kZXMnIGJvZHlcbiAgICBsZXQgZGF0YUJveENvdW50ID0gMDtcbiAgICBmb3IgKGxldCBleHAgaW4gdmlzaWJsZURhdGFNYXBCeUV4cCkge1xuICAgICAgaWYgKHZpc2libGVEYXRhTWFwQnlFeHBbZXhwXSkge1xuICAgICAgICBkYXRhQm94Q291bnQrKztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFCb3hDb3VudDtcbiAgfTtcblxuICBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5nZW5lcmF0ZVNWR0Zvck5vZGUgPSBmdW5jdGlvbiAoZWxlLCB0b29sdGlwKSB7XG4gICAgY29uc3QgZGF0YUJveENvdW50ID0gdGhpcy5jb3VudFZpc2libGVEYXRhQnlFeHAoKTtcbiAgICB2YXIgdmFsdWVzID0gW107ICAgXG4gICAgLy8gRXhwZXJpbWVudGFsIGRhdGEgb3ZlcmxheSBwYXJ0ICFcbiAgICAvLyBjb25zdCBkYXRhVVJJID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCdcbiAgICBjb25zdCBzdmdOYW1lU3BhY2UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgIGNvbnN0IG5vZGVMYWJlbCA9IGVsZS5kYXRhKCdsYWJlbCcpO1xuICAgIGNvbnN0IHJlcVdpZHRoID0gZWxlLm91dGVyV2lkdGgoKTtcbiAgICBjb25zdCByZXFIZWlnaHQgPSBlbGUub3V0ZXJIZWlnaHQoKTtcbiAgICBjb25zdCBvdmVybGF5UmVjQm94VyA9IHJlcVdpZHRoO1xuICAgIGNvbnN0IG92ZXJsYXlSZWNCb3hIID0gcmVxSGVpZ2h0O1xuICAgIGNvbnN0IHN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOYW1lU3BhY2UsICdzdmcnKTtcbiAgICAvLyBJdCBzZWVtcyB0aGlzIHNob3VsZCBiZSBzZXQgYWNjb3JkaW5nIHRvIHRoZSBub2RlIHNpemUgIVxuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgcmVxV2lkdGgpO1xuICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHJlcUhlaWdodCk7XG4gICAgLy8gVGhpcyBpcyBpbXBvcnRhbnQgeW91IG5lZWQgdG8gaW5jbHVkZSB0aGlzIHRvIHN1Y2Nlc2Z1bGx5IHJlbmRlciBpbiBjeXRvc2NhcGUuanMhXG4gICAgc3ZnLnNldEF0dHJpYnV0ZSgneG1sbnMnLCBzdmdOYW1lU3BhY2UpO1xuXG4gICAgLy8gT3ZlcmxheSBEYXRhIFJlY3RcbiAgICBjb25zdCBvdmVyTGF5UmVjdEJCb3ggPSB7XG4gICAgICB3OiBvdmVybGF5UmVjQm94VyxcbiAgICAgIGg6IG92ZXJsYXlSZWNCb3hILFxuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuXG4gICAgY29uc3QgZnJlcXVlbmN5RGF0YSA9IHBhcnNlZERhdGFNYXBbbm9kZUxhYmVsXTtcblxuICAgIGxldCBtYXhEYXRhQm94Q291bnQgPSAvKihnZW5vbWljRGF0YUJveENvdW50ID4gMykgPyAzOiovIGRhdGFCb3hDb3VudDtcbiAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICBmb3IgKGxldCBpIGluIGdyb3VwZWREYXRhTWFwKSB7XG4gICAgICBmb3IgKGxldCBqIGluIGdyb3VwZWREYXRhTWFwW2ldKSB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gaTtcbiAgICAgICAgY29uc3QgZXhwTmFtZSA9IGdyb3VwZWREYXRhTWFwW2ldW2pdO1xuICAgICAgICBpZiAoIXZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJlcXVlbmN5RGF0YVtmaWxlTmFtZSArICc/JyArIGV4cE5hbWVdICE9PSB1bmRlZmluZWQpIHsgICAgICAgICBcbiAgICAgICAgICB2YWx1ZXMucHVzaChmcmVxdWVuY3lEYXRhW2ZpbGVOYW1lICsgJz8nICsgZXhwTmFtZV0pO1xuICAgICAgICAgIGRhdGFSZWN0YW5nbGVHZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICBvdmVyTGF5UmVjdEJCb3gueCArXG4gICAgICAgICAgICAgICAgICAoY291bnRlciAqIG92ZXJMYXlSZWN0QkJveC53KSAvIG1heERhdGFCb3hDb3VudCxcbiAgICAgICAgICAgICAgICAgIG92ZXJMYXlSZWN0QkJveC55LFxuICAgICAgICAgICAgICAgICAgb3ZlckxheVJlY3RCQm94LncgLyBtYXhEYXRhQm94Q291bnQsXG4gICAgICAgICAgICAgICAgICBvdmVyTGF5UmVjdEJCb3guaCxcbiAgICAgICAgICAgICAgICAgIGZyZXF1ZW5jeURhdGFbZmlsZU5hbWUgKyAnPycgKyBleHBOYW1lXSxcbiAgICAgICAgICAgICAgICAgIHN2ZyxcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlcy5wdXNoKFwiLVwiKTtcbiAgICAgICAgICBkYXRhUmVjdGFuZ2xlR2VuZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgb3ZlckxheVJlY3RCQm94LnggK1xuICAgICAgICAgICAgICAgICAgKGNvdW50ZXIgKiBvdmVyTGF5UmVjdEJCb3gudykgLyBtYXhEYXRhQm94Q291bnQsXG4gICAgICAgICAgICAgICAgICBvdmVyTGF5UmVjdEJCb3gueSxcbiAgICAgICAgICAgICAgICAgIG92ZXJMYXlSZWN0QkJveC53IC8gbWF4RGF0YUJveENvdW50LFxuICAgICAgICAgICAgICAgICAgb3ZlckxheVJlY3RCQm94LmgsXG4gICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgc3ZnLFxuICAgICAgICAgICAgICAgICAgZmlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAgICAvLyAgZHJhdyBzZXBhcmF0b3IgbGluZSBiZXR3ZWVuIGRhdGEgcmVjdGFuZ2xlc1xuICAgICAgICBpZiAoY291bnRlciA8IG1heERhdGFCb3hDb3VudCAtIDEpIHtcbiAgICAgICAgICBjb25zdCBvdmVybGF5UmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOYW1lU3BhY2UsICdsaW5lJyk7XG4gICAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCd4MScsIG92ZXJMYXlSZWN0QkJveC54ICsgKGNvdW50ZXIgKiBvdmVyTGF5UmVjdEJCb3gudykgLyBtYXhEYXRhQm94Q291bnRcbiAgICAgICAgICAgICAgICAgICsgb3ZlckxheVJlY3RCQm94LncgLyBtYXhEYXRhQm94Q291bnQpO1xuICAgICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZSgneTEnLCBvdmVyTGF5UmVjdEJCb3gueSk7XG4gICAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCd4MicsIG92ZXJMYXlSZWN0QkJveC54ICsgKGNvdW50ZXIgKiBvdmVyTGF5UmVjdEJCb3gudykgLyBtYXhEYXRhQm94Q291bnRcbiAgICAgICAgICAgICAgICAgICsgb3ZlckxheVJlY3RCQm94LncgLyBtYXhEYXRhQm94Q291bnQpO1xuICAgICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZSgneTInLCBvdmVyTGF5UmVjdEJCb3gueSArIG92ZXJMYXlSZWN0QkJveC5oKTtcbiAgICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAgICAgICAnc3R5bGUnLFxuICAgICAgICAgICAgICAgICAgJ3N0cm9rZS13aWR0aDoxO3N0cm9rZTpyZ2IoODUsODUsODUpOydcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgc3ZnLmFwcGVuZENoaWxkKG92ZXJsYXlSZWN0KTtcbiAgICAgICAgfVxuICAgICAgICBjb3VudGVyKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdG9vbHRpcC5jb250ZW50ID0gXCIoXCIgKyB2YWx1ZXMuam9pbihcIixcIikgKyBcIilcIjtcblxuICAgIGZ1bmN0aW9uIGludGVycG9sYXRlQ29sb3IoY29sb3IxLCBjb2xvcjIsIGZhY3Rvcikge1xuICAgICAgdmFyIHJlc3VsdCA9IGNvbG9yMS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgcmVzdWx0W2ldID0gTWF0aC5yb3VuZChyZXN1bHRbaV0gKyBmYWN0b3IgKiAoY29sb3IyW2ldIC0gY29sb3IxW2ldKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBkZWNpZGVDb2xvcihwZXJjZW50LCBmaWxlTmFtZSkge1xuICAgICAgdmFyIHNvcnRlZCA9IFtdO1xuICAgICAgZm9yIChsZXQgaSBpbiBjb2xvck1hcFtmaWxlTmFtZV0pIHtcbiAgICAgICAgc29ydGVkLnB1c2goaSk7XG4gICAgICB9XG4gICAgICBzb3J0ZWQuc29ydCgpO1xuXG4gICAgICB2YXIgcHJldiA9IHNvcnRlZFswXTtcbiAgICAgIHZhciBuZXh0ID0gc29ydGVkW3NvcnRlZC5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHBlcmNlbnQgPCBwcmV2IHx8IHBlcmNlbnQgPiBuZXh0KSB7XG4gICAgICAgIHJldHVybiAoe3I6IDIxMCwgZzogMjEwLCBiOiAyMTB9KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgayBpbiBzb3J0ZWQpIHtcbiAgICAgICAgdmFyIGkgPSBzb3J0ZWRba107XG4gICAgICAgIGlmIChpID09IHBlcmNlbnQpIHtcbiAgICAgICAgICByZXR1cm4gKHtyOiBjb2xvck1hcFtmaWxlTmFtZV1baV1bMF0sIGc6IGNvbG9yTWFwW2ZpbGVOYW1lXVtpXVsxXSwgYjogY29sb3JNYXBbZmlsZU5hbWVdW2ldWzJdfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA+IHBlcmNlbnQpIHtcbiAgICAgICAgICBuZXh0ID0gaTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2ID0gaTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc3RlcHMgPSAxIC8gKG5leHQgLSBwcmV2KTtcbiAgICAgIHZhciByZXMgPSBpbnRlcnBvbGF0ZUNvbG9yKGNvbG9yTWFwW2ZpbGVOYW1lXVtwcmV2XSwgY29sb3JNYXBbZmlsZU5hbWVdW25leHRdLCBzdGVwcyAqIChwZXJjZW50IC0gcHJldikpO1xuXG4gICAgICByZXR1cm4gKHtyOiByZXNbMF0sIGc6IHJlc1sxXSwgYjogcmVzWzJdfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRhdGFSZWN0YW5nbGVHZW5lcmF0b3IoeCwgeSwgdywgaCwgcGVyY2VudCwgcGFyZW50U1ZHLCBmaWxlTmFtZSkge1xuICAgICAgbGV0IGNvbG9yU3RyaW5nID0gJyc7XG4gICAgICBpZiAocGVyY2VudCkge1xuICAgICAgICB2YXIgY29sb3IgPSBkZWNpZGVDb2xvcihwYXJzZUludChwZXJjZW50KSwgZmlsZU5hbWUpO1xuICAgICAgICBjb2xvclN0cmluZyA9XG4gICAgICAgICAgICAgICAgJ3JnYignICtcbiAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKGNvbG9yLnIpICtcbiAgICAgICAgICAgICAgICAnLCcgK1xuICAgICAgICAgICAgICAgIE1hdGgucm91bmQoY29sb3IuZykgK1xuICAgICAgICAgICAgICAgICcsJyArXG4gICAgICAgICAgICAgICAgTWF0aC5yb3VuZChjb2xvci5iKSArICcpJztcbiAgICAgICAgLy8gUmVjdGFuZ2xlIFBhcnRcbiAgICAgICAgY29uc3Qgb3ZlcmxheVJlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoc3ZnTmFtZVNwYWNlLCAncmVjdCcpO1xuICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ3gnLCB4KTtcbiAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCd5JywgeSk7XG4gICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZSgnd2lkdGgnLCB3KTtcbiAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBoKTtcbiAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCdzdHlsZScsICdvcGFjaXR5OjE7ZmlsbDonICsgY29sb3JTdHJpbmcgKyAnOycpO1xuXG4gICAgICAgIHBhcmVudFNWRy5hcHBlbmRDaGlsZChvdmVybGF5UmVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xvclN0cmluZyA9ICdyZ2IoMjEwLDIxMCwyMTApJztcblxuICAgICAgICAvLyBSZWN0YW5nbGUgUGFydFxuICAgICAgICBjb25zdCBvdmVybGF5UmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzdmdOYW1lU3BhY2UsICdyZWN0Jyk7XG4gICAgICAgIG92ZXJsYXlSZWN0LnNldEF0dHJpYnV0ZSgneCcsIHgpO1xuICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ3knLCB5KTtcbiAgICAgICAgb3ZlcmxheVJlY3Quc2V0QXR0cmlidXRlKCd3aWR0aCcsIHcpO1xuICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGgpO1xuICAgICAgICBvdmVybGF5UmVjdC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ29wYWNpdHk6MTtmaWxsOicgKyBjb2xvclN0cmluZyArICc7Jyk7XG5cbiAgICAgICAgcGFyZW50U1ZHLmFwcGVuZENoaWxkKG92ZXJsYXlSZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3ZnO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnNob3dEYXRhID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHZhciBub2RlQ29sbGVjdGlvbiA9IGN5LmNvbGxlY3Rpb24oKTtcbiAgICB2YXIgY29sbGFwc2VkQ2hpbGRyZW4gPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0JykuZ2V0QWxsQ29sbGFwc2VkQ2hpbGRyZW5SZWN1cnNpdmVseSgpLmZpbHRlcihcIm5vZGVcIik7XG4gICAgdmFyIGNvbGxhcHNlZENoaWxkcmVuTm90UGFyZW50ID0gY3kuY29sbGVjdGlvbigpO1xuICAgIHZhciBwYXJlbnRTZXQgPSBuZXcgU2V0KCk7ICAvLyBwYXJlbnQgaWRzIG9mIGNvbGxhcHNlZCBjaGlsZHJlblxuICAgIGNvbGxhcHNlZENoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICBwYXJlbnRTZXQuYWRkKG5vZGUucGFyZW50KCkuaWQoKSk7XG4gICAgfSk7XG4gICAgLy8gZmlsdGVyIHBhcmVudCBub2RlcyBmcm9tIGNvbGxhcHNlZCBjaGlsZHJlblxuICAgIGNvbGxhcHNlZENoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24obm9kZSl7XG4gICAgICBpZighcGFyZW50U2V0Lmhhcyhub2RlLmlkKCkpKXsgLy8gdGhpcyBtZWFucyByZW1vdmVkIG5vZGUgaXMgbm90IHBhcmVudFxuICAgICAgICBjb2xsYXBzZWRDaGlsZHJlbk5vdFBhcmVudCA9IGNvbGxhcHNlZENoaWxkcmVuTm90UGFyZW50LnVuaW9uKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBleHBhbmRhYmxlTm9kZXMgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0JykuZXhwYW5kYWJsZU5vZGVzKCk7XG4gICAgbm9kZUNvbGxlY3Rpb24gPSBub2RlQ29sbGVjdGlvbi51bmlvbihjeS5ub2RlcygpKS51bmlvbihjb2xsYXBzZWRDaGlsZHJlbk5vdFBhcmVudCkuZGlmZmVyZW5jZShleHBhbmRhYmxlTm9kZXMpO1xuICAgIGN5LmJhdGNoKGZ1bmN0aW9uKCl7XG4gICAgICBub2RlQ29sbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIGNvbnN0IG5vZGVMYWJlbCA9IG5vZGUuZGF0YSgnbGFiZWwnKTtcbiAgICAgICAgdmFyIGltYWdlVVJJID0gJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCc7XG4gICAgICAgIGlmIChub2RlTGFiZWwgaW4gcGFyc2VkRGF0YU1hcCAmJiAhbm9kZS5pc1BhcmVudCgpKSB7XG5cbiAgICAgICAgICB2YXIgdG9vbHRpcCA9IHtjb250ZW50OicnfTtcbiAgICAgICAgICBpbWFnZVVSSSA9IGltYWdlVVJJICsgZW5jb2RlVVJJQ29tcG9uZW50KHNlbGYuZ2VuZXJhdGVTVkdGb3JOb2RlKG5vZGUsdG9vbHRpcCkub3V0ZXJIVE1MKTtcblxuICAgICAgICAgIGlmKE9iamVjdC5rZXlzKHBhcnNlZERhdGFNYXBbbm9kZUxhYmVsXSkubGVuZ3RoID4gMCl7XG4gICAgICAgICAgIC8vIHZhciB0b29sdGlwID0gXCIoXCIgKyBPYmplY3QudmFsdWVzKHBhcnNlZERhdGFNYXBbbm9kZUxhYmVsXSkuam9pbihcIixcIikgKyBcIilcIjtcbiAgICAgICAgICAgIG5vZGUuZGF0YShcInRvb2x0aXBcIix0b29sdGlwLmNvbnRlbnQpO1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgbm9kZS5kYXRhKCd0b29sdGlwJywnJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1pbWFnZScsIGltYWdlVVJJKSxcbiAgICAgICAgICAgICAgICAgIG5vZGUuZGF0YSgnYmFja2dyb3VuZC1wb3NpdGlvbi14JywgJzEwMCUnKTtcbiAgICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtcG9zaXRpb24teScsICcxMDAlJyk7XG4gICAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLXdpZHRoJywgJzEwMCUnKTtcbiAgICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaGVpZ2h0JywgJzEwMCUnKTtcbiAgICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtZml0JywgJ2NvbnRhaW4nKTtcbiAgICAgICAgICBub2RlLmRhdGEoJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eScsICcxJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS5kYXRhKCdiYWNrZ3JvdW5kLWltYWdlJywgXCJcIik7XG4gICAgICAgICAgbm9kZS5kYXRhKCd0b29sdGlwJywnJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pOyAgICAgIFxuICAgICAgXG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaGV4VG9SZ2IgPSBmdW5jdGlvbiAoaGV4KSB7XG4gICAgaWYgKGhleFswXSA9PSAnIycpIHtcbiAgICAgIGhleCA9IGhleC5zdWJzdHJpbmcoMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGJpZ2ludCA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgIHZhciByID0gKGJpZ2ludCA+PiAxNikgJiAyNTU7XG4gICAgdmFyIGcgPSAoYmlnaW50ID4+IDgpICYgMjU1O1xuICAgIHZhciBiID0gYmlnaW50ICYgMjU1O1xuICAgIHJldHVybiBbciwgZywgYl07XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaXNIZXggPSBmdW5jdGlvbiAoaGV4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBoZXggPT0gJ3N0cmluZydcbiAgICAgICAgICAgICYmIGhleC5sZW5ndGggPT0gN1xuICAgICAgICAgICAgJiYgIWlzTmFOKE51bWJlcignMHgnICsgaGV4LnN1YnN0cmluZygxKSkpXG4gICAgICAgICAgICAmJiBoZXhbMF0gPT0gJyMnO1xuICB9O1xuXG4gIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnBhcnNlRGF0YSA9IGZ1bmN0aW9uIChkYXRhLCBmaWxlTmFtZSwgZXJyb3JDYWxsYmFjaywgc2FtcGxlRXhwZXJpbWVudCkge1xuICAgIHBhcnNlZERhdGFNYXAgPSBwYXJzZWREYXRhTWFwIHx8IHt9O1xuICAgIHZpc2libGVEYXRhTWFwQnlFeHAgPSB2aXNpYmxlRGF0YU1hcEJ5RXhwIHx8IHt9O1xuICAgIGdyb3VwZWREYXRhTWFwID0gZ3JvdXBlZERhdGFNYXAgfHwge307XG4gICAgY29sb3JNYXAgPSBjb2xvck1hcCB8fCB7fTtcbiAgICBjb25zdCBleHBlcmltZW50cyA9IFtdO1xuICAgIHZhciBjb2xvcnMgPSB7fTtcblxuICAgIGlmIChmaWxlTmFtZSBpbiBncm91cGVkRGF0YU1hcCAmJiAhc2FtcGxlRXhwZXJpbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmIChmaWxlTmFtZSBpbiBncm91cGVkRGF0YU1hcCAmJiBzYW1wbGVFeHBlcmltZW50KSB7XG4gICAgICB0aGlzLnJlbW92ZUFsbCgpO1xuICAgIH1cblxuICAgIHZhciBwYXJzZWQgPSB7fTtcbiAgICB2YXIgdmlzaWJsZSA9IHt9O1xuICAgIHZhciBncm91cGVkID0ge307XG4gICAgdmFyIHZpc2libGVmID0ge307XG4gICAgdmFyIGNvbG9ybSA9IHt9O1xuICAgIHZhciBmaWxlRCA9IHt9O1xuICAgIHZhciBmaWxlTiA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSBpbiBwYXJzZWREYXRhTWFwKSB7XG4gICAgICBpZiAoIXBhcnNlZFtpXSkge1xuICAgICAgICBwYXJzZWRbaV0gPSB7fTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGogaW4gcGFyc2VkRGF0YU1hcFtpXSkge1xuICAgICAgICBwYXJzZWRbaV1bal0gPSBwYXJzZWREYXRhTWFwW2ldW2pdO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpIGluIHZpc2libGVEYXRhTWFwQnlFeHApIHtcbiAgICAgIHZpc2libGVbaV0gPSB2aXNpYmxlRGF0YU1hcEJ5RXhwW2ldO1xuICAgIH1cbiAgICBmb3IgKGxldCBpIGluIHZpc2libGVGaWxlcykge1xuICAgICAgdmlzaWJsZWZbaV0gPSB2aXNpYmxlRmlsZXNbaV07XG4gICAgfVxuICAgIGZvciAobGV0IGkgaW4gZ3JvdXBlZERhdGFNYXApIHtcbiAgICAgIGlmICghZ3JvdXBlZFtpXSkge1xuICAgICAgICBncm91cGVkW2ldID0gW107XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqIGluIGdyb3VwZWREYXRhTWFwW2ldKSB7XG4gICAgICAgIGdyb3VwZWRbaV0ucHVzaChncm91cGVkRGF0YU1hcFtpXVtqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSBpbiBjb2xvck1hcCkge1xuICAgICAgY29sb3JtW2ldID0gY29sb3JNYXBbaV07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSBpbiB2aXNpYmxlRmlsZXMpIHtcbiAgICAgIGZpbGVEW2ldID0gZmlsZURlc2NyaXB0aW9uW2ldO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgaW4gdmlzaWJsZUZpbGVzKSB7XG4gICAgICBmaWxlTltpXSA9IGZpbGVUaXRsZVtpXTtcbiAgICB9XG5cbiAgICB2YXIgaW50cmVnZXggPSBcIl4oLT8pKDB8KFsxLTldWzAtOV0qKSkoXFxcXC5bMC05XSspPyRcIjtcbiAgICB2YXIgdmVyc2lvbiA9ICcxLjAnO1xuICAgIHZhciBjbHIgPSBmYWxzZTtcbiAgICAvLyBCeSBsaW5lc1xuICAgIGNvbnN0IGxpbmVzID0gZGF0YS5zcGxpdCgnXFxuJyk7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA8IDIpIHtcbiAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgIHJldHVybiBcIkVycm9yXCI7XG4gICAgfVxuICAgIHZhciBrID0gMDtcbiAgICB2YXIgdXB0byA9IDQ7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA8IDQpIHtcbiAgICAgIHVwdG8gPSBsaW5lcy5sZW5ndGg7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXB0bzsgaSsrKSB7XG4gICAgICBpZiAobGluZXNbaV0uc3Vic3RyaW5nKDAsIDcpID09ICd2ZXJzaW9uJykge1xuICAgICAgICBrKys7XG4gICAgICAgIGNvbnN0IG1ldGFMaW5lcyA9IGxpbmVzW2ldLnNwbGl0KCdcXHQnKTtcbiAgICAgICAgaWYgKG1ldGFMaW5lc1sxXSAmJiBtZXRhTGluZXNbMV0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHZlcnNpb24gPSBtZXRhTGluZXNbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmlsZURlc2NyaXB0aW9uID0gZmlsZUQ7XG4gICAgICAgICAgZmlsZVRpdGxlID0gZmlsZU47XG4gICAgICAgICAgdmVyc2lvbiA9IFwiMS4wXCI7XG4gICAgICAgICAgY29sb3JNYXAgPSBjb2xvcm07XG4gICAgICAgICAgZXJyb3JDYWxsYmFjaygpO1xuICAgICAgICAgIHJldHVybiBcIkVycm9yXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChsaW5lc1tpXS5zdWJzdHJpbmcoMCwgNCkgPT0gJ25hbWUnKSB7XG4gICAgICAgIGsrKztcbiAgICAgICAgY29uc3QgbWV0YUxpbmVzID0gbGluZXNbaV0uc3BsaXQoJ1xcdCcpO1xuICAgICAgICBpZiAobWV0YUxpbmVzWzFdICYmIG1ldGFMaW5lc1sxXS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgZmlsZVRpdGxlW2ZpbGVOYW1lXSA9IG1ldGFMaW5lc1sxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlVGl0bGUgPSBmaWxlTjtcbiAgICAgICAgICBmaWxlRGVzY3JpcHRpb24gPSBmaWxlRDtcbiAgICAgICAgICB2ZXJzaW9uID0gXCIxLjBcIjtcbiAgICAgICAgICBjb2xvck1hcCA9IGNvbG9ybTtcbiAgICAgICAgICBlcnJvckNhbGxiYWNrKCk7XG4gICAgICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxpbmVzW2ldLnN1YnN0cmluZygwLCAxMSkgPT0gJ2Rlc2NyaXB0aW9uJykge1xuICAgICAgICBrKys7XG4gICAgICAgIGNvbnN0IG1ldGFMaW5lcyA9IGxpbmVzW2ldLnNwbGl0KCdcXHQnKTtcbiAgICAgICAgaWYgKG1ldGFMaW5lc1sxXSAmJiBtZXRhTGluZXNbMV0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGZpbGVEZXNjcmlwdGlvbltmaWxlTmFtZV0gPSBtZXRhTGluZXNbMV07XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlVGl0bGUgPSBmaWxlTjtcbiAgICAgICAgICBmaWxlRGVzY3JpcHRpb24gPSBmaWxlRDtcbiAgICAgICAgICB2ZXJzaW9uID0gXCIxLjBcIjtcbiAgICAgICAgICBjb2xvck1hcCA9IGNvbG9ybTtcbiAgICAgICAgICBlcnJvckNhbGxiYWNrKCk7XG4gICAgICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxpbmVzW2ldLnN1YnN0cmluZygwLCA1KSA9PSAnY29sb3InKSB7XG4gICAgICAgIGNsciA9IHRydWU7XG4gICAgICAgIGsrKztcbiAgICAgICAgY29uc3QgbWV0YUxpbmVzID0gbGluZXNbaV0uc3BsaXQoJ1xcdCcpO1xuICAgICAgICBpZiAobWV0YUxpbmVzLmxlbmd0aCA8PSAxICYmIG1ldGFMaW5lcy5sZW5ndGggJSAyID09IDApIHtcbiAgICAgICAgICBlcnJvckNhbGxiYWNrKCk7XG4gICAgICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IHQgPSAxOyB0IDwgbWV0YUxpbmVzLmxlbmd0aCAtIDE7IHQgPSB0ICsgMikge1xuICAgICAgICAgIHZhciBoZXggPSBtZXRhTGluZXNbdCArIDFdO1xuICAgICAgICAgIGlmICh0ID09IG1ldGFMaW5lcy5sZW5ndGggLSAyKSB7XG4gICAgICAgICAgICBoZXggPSBoZXgudHJpbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWV0YUxpbmVzW3RdID09IFwibWluXCIgfHwgbWV0YUxpbmVzW3RdID09IFwibWF4XCIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzSGV4KGhleCkpIHtcbiAgICAgICAgICAgICAgY29sb3JzWyhtZXRhTGluZXNbdF0pXSA9IHRoaXMuaGV4VG9SZ2IoaGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHBhcnNlSW50KG1ldGFMaW5lc1t0XSkgIT0gTmFOKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0hleChoZXgpKSB7XG4gICAgICAgICAgICAgIGNvbG9yc1twYXJzZUludChtZXRhTGluZXNbdF0pXSA9IHRoaXMuaGV4VG9SZ2IoaGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpbGVUaXRsZSA9IGZpbGVOO1xuICAgICAgICAgICAgICBmaWxlRGVzY3JpcHRpb24gPSBmaWxlRDtcbiAgICAgICAgICAgICAgY29sb3JNYXAgPSBjb2xvcm07XG4gICAgICAgICAgICAgIHZlcnNpb24gPSBcIjEuMFwiO1xuICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIHJldHVybiBcIkVycm9yXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbGVUaXRsZSA9IGZpbGVOO1xuICAgICAgICAgICAgZmlsZURlc2NyaXB0aW9uID0gZmlsZUQ7XG4gICAgICAgICAgICBjb2xvck1hcCA9IGNvbG9ybTtcbiAgICAgICAgICAgIHZlcnNpb24gPSBcIjEuMFwiO1xuICAgICAgICAgICAgZXJyb3JDYWxsYmFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvL2RlZmF1bHQgY29sb3JzXG4gICAgaWYgKCFjbHIpIHtcbiAgICAgIGNvbG9yc1stMTAwXSA9IHRoaXMuaGV4VG9SZ2IoJyMwMDAwZmYnKTtcbiAgICAgIGNvbG9yc1sxMDBdID0gdGhpcy5oZXhUb1JnYignI2ZmMDAwMCcpO1xuICAgICAgY29sb3JzWzBdID0gdGhpcy5oZXhUb1JnYignI2ZmZmZmZicpO1xuICAgIH1cblxuICAgIC8vIEZpcnN0IGxpbmUgaXMgbWV0YSBkYXRhICFcbiAgICBjb25zdCBtZXRhTGluZUNvbHVtbnMgPSBsaW5lc1trXS5zcGxpdCgnXFx0Jyk7XG5cbiAgICAvLyBQYXJzZSBleHBlcmltZW50IHR5cGVzXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtZXRhTGluZUNvbHVtbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpID09IG1ldGFMaW5lQ29sdW1ucy5sZW5ndGggLSAxKSB7XG4gICAgICAgIHZhciB0cmltbWVkID0gbWV0YUxpbmVDb2x1bW5zW2ldLnRyaW0oKTtcbiAgICAgICAgZXhwZXJpbWVudHMucHVzaCh0cmltbWVkKTtcbiAgICAgIH0gZWxzZVxuICAgICAgICBleHBlcmltZW50cy5wdXNoKG1ldGFMaW5lQ29sdW1uc1tpXSk7XG5cbiAgICAgIHZpc2libGVEYXRhTWFwQnlFeHBbZmlsZU5hbWUgKyAnPycgKyBleHBlcmltZW50c1tpIC0gMV1dID0gdHJ1ZTtcblxuICAgICAgaWYgKGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGdyb3VwZWREYXRhTWFwW2ZpbGVOYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgZ3JvdXBlZERhdGFNYXBbZmlsZU5hbWVdLnB1c2goZXhwZXJpbWVudHNbaSAtIDFdKTtcbiAgICB9XG5cbiAgICB2aXNpYmxlRmlsZXNbZmlsZU5hbWVdID0gdHJ1ZTtcblxuICAgIHZhciBtaW4gPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIHZhciBtYXggPSBOdW1iZXIuTUlOX1ZBTFVFO1xuXG4gICAgLy8gcGFyc2UgZ2Vub21pYyBkYXRhXG4gICAgZm9yIChsZXQgaSA9IGsgKyAxOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIEVPRiBjaGVja1xuICAgICAgaWYgKGxpbmVzW2ldLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgLy8gU3BsaXQgZWFjaCBsaW5lIGJ5IHRhYiBhbmQgcGFyc2UgZ2Vub21pYyBkYXRhIGNvbnRlbnRcbiAgICAgIGNvbnN0IGxpbmVDb250ZW50ID0gbGluZXNbaV0uc3BsaXQoJ1xcdCcpO1xuICAgICAgY29uc3QgZWxlU3ltYm9sID0gbGluZUNvbnRlbnRbMF07XG5cbiAgICAgIC8vIElmIGN1cnJlbnQgZ2VuZSBlbnRyeSBpcyBub3QgIGluIGdlbm9taWMgZGF0YSBtYXAgY3JlYXRlIG5ldyBtYXBcbiAgICAgIGlmICghKGVsZVN5bWJvbCBpbiBwYXJzZWREYXRhTWFwKSkge1xuICAgICAgICBwYXJzZWREYXRhTWFwW2VsZVN5bWJvbF0gPSB7fTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGVhY2ggZW50cnkgb2YgZ2Vub21pYyBkYXRhXG4gICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGxpbmVDb250ZW50Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChqID09IGxpbmVDb250ZW50Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBsaW5lQ29udGVudFtqXSA9IGxpbmVDb250ZW50W2pdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGluZUNvbnRlbnRbal0ubWF0Y2goaW50cmVnZXgpKSB7XG4gICAgICAgICAgcGFyc2VkRGF0YU1hcFtlbGVTeW1ib2xdW2ZpbGVOYW1lICsgJz8nICsgZXhwZXJpbWVudHNbaiAtIDFdXSA9IGxpbmVDb250ZW50W2pdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlZERhdGFNYXAgPSBwYXJzZWQ7XG4gICAgICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cCA9IHZpc2libGU7XG4gICAgICAgICAgZ3JvdXBlZERhdGFNYXAgPSBncm91cGVkO1xuICAgICAgICAgIGNvbG9yTWFwID0gY29sb3JtO1xuICAgICAgICAgIHZpc2libGVGaWxlcyA9IHZpc2libGVmO1xuICAgICAgICAgIGZpbGVUaXRsZSA9IGZpbGVOO1xuICAgICAgICAgIGZpbGVEZXNjcmlwdGlvbiA9IGZpbGVEO1xuICAgICAgICAgIHZlcnNpb24gPSBcIjEuMFwiO1xuICAgICAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm4gXCJFcnJvclwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lQ29udGVudFtqXSA+IG1heCkge1xuICAgICAgICAgIG1heCA9IGxpbmVDb250ZW50W2pdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW5lQ29udGVudFtqXSA8IG1pbikge1xuICAgICAgICAgIG1pbiA9IGxpbmVDb250ZW50W2pdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbG9yc1snbWluJ10pIHtcbiAgICAgIHZhciBjb2xvcnZhbHVlID0gY29sb3JzWydtaW4nXTtcbiAgICAgIGRlbGV0ZSBjb2xvcnNbJ21pbiddO1xuICAgICAgY29sb3JzW21pbl0gPSBjb2xvcnZhbHVlO1xuICAgIH1cblxuICAgIGlmIChjb2xvcnNbJ21heCddKSB7XG4gICAgICB2YXIgY29sb3J2YWx1ZSA9IGNvbG9yc1snbWF4J107XG4gICAgICBkZWxldGUgY29sb3JzWydtYXgnXTtcbiAgICAgIGNvbG9yc1ttYXhdID0gY29sb3J2YWx1ZTtcbiAgICB9XG5cbiAgICBjb2xvck1hcFtmaWxlTmFtZV0gPSBjb2xvcnM7XG4gICAgdmFyIHBhcmFtcyA9IHtmaWxlTmFtZX07XG4gICAgdGhpcy5zaG93RGF0YSgpO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH07XG5cbiAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuZ2V0RXhwZXJpbWVudGFsRGF0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlzaWJsZURhdGFNYXBCeUV4cDogdmlzaWJsZURhdGFNYXBCeUV4cCxcbiAgICAgIHZpc2libGVGaWxlczogdmlzaWJsZUZpbGVzLFxuICAgICAgZmlsZURlc2NyaXB0aW9uOiBmaWxlRGVzY3JpcHRpb24sXG4gICAgICBhbGxWaXM6IGFsbFZpcyxcbiAgICAgIGZpbGVUaXRsZTogZmlsZVRpdGxlLFxuICAgICAgcGFyc2VkRGF0YU1hcDpwYXJzZWREYXRhTWFwXG4gICAgfTtcbiAgfTtcbiAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5O1xufTtcbiIsIi8qXG4qIEZpbGUgVXRpbGl0aWVzOiBUbyBiZSB1c2VkIG9uIHJlYWQvd3JpdGUgZmlsZSBvcGVyYXRpb25cbiovXG5cbnZhciBsaWJVdGlsaXRpZXMgPSByZXF1aXJlKCcuL2xpYi11dGlsaXRpZXMnKTtcbnZhciBsaWJzID0gbGliVXRpbGl0aWVzLmdldExpYnMoKTtcbnZhciBqUXVlcnkgPSAkID0gbGlicy5qUXVlcnk7XG52YXIgc2F2ZUFzID0gbGlicy5zYXZlQXM7XG52YXIgdGV4dFV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdGV4dC11dGlsaXRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gLy8gSGVscGVyIGZ1bmN0aW9ucyBTdGFydFxuIC8vIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE2MjQ1NzY3L2NyZWF0aW5nLWEtYmxvYi1mcm9tLWEtYmFzZTY0LXN0cmluZy1pbi1qYXZhc2NyaXB0XG4gZnVuY3Rpb24gYjY0dG9CbG9iKGI2NERhdGEsIGNvbnRlbnRUeXBlLCBzbGljZVNpemUpIHtcbiAgIGNvbnRlbnRUeXBlID0gY29udGVudFR5cGUgfHwgJyc7XG4gICBzbGljZVNpemUgPSBzbGljZVNpemUgfHwgNTEyO1xuXG4gICB2YXIgYnl0ZUNoYXJhY3RlcnMgPSBhdG9iKGI2NERhdGEpO1xuICAgdmFyIGJ5dGVBcnJheXMgPSBbXTtcblxuICAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XG4gICAgIHZhciBzbGljZSA9IGJ5dGVDaGFyYWN0ZXJzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2xpY2VTaXplKTtcblxuICAgICB2YXIgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZS5sZW5ndGg7IGkrKykge1xuICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcbiAgICAgfVxuXG4gICAgIHZhciBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlTnVtYmVycyk7XG5cbiAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XG4gICB9XG5cbiAgIHZhciBibG9iID0gbmV3IEJsb2IoYnl0ZUFycmF5cywge3R5cGU6IGNvbnRlbnRUeXBlfSk7XG4gICByZXR1cm4gYmxvYjtcbiB9XG5cbiBmdW5jdGlvbiBsb2FkVGV4dERvYyhmdWxsRmlsZVBhdGgpIHtcbiAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpIHtcbiAgICAgeGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgIH1cbiAgIGVsc2Uge1xuICAgICB4aHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KFwiTWljcm9zb2Z0LlhNTEhUVFBcIik7XG4gICB9XG4gICB4aHR0cC5vdmVycmlkZU1pbWVUeXBlKCdhcHBsaWNhdGlvbi90ZXh0Jyk7XG4gICB4aHR0cC5vcGVuKFwiR0VUXCIsIGZ1bGxGaWxlUGF0aCwgZmFsc2UpO1xuICAgeGh0dHAuc2VuZCgpO1xuICAgcmV0dXJuIHhodHRwLnJlc3BvbnNlVGV4dDtcbiB9XG5cbiBmdW5jdGlvbiBsb2FkWE1MRG9jKGZ1bGxGaWxlUGF0aCkge1xuICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7XG4gICAgeGh0dHAgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgfVxuICBlbHNlIHtcbiAgICB4aHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KFwiTWljcm9zb2Z0LlhNTEhUVFBcIik7XG4gIH1cbiAgeGh0dHAub3ZlcnJpZGVNaW1lVHlwZSgnYXBwbGljYXRpb24veG1sJyk7XG4gIHhodHRwLm9wZW4oXCJHRVRcIiwgZnVsbEZpbGVQYXRoLCBmYWxzZSk7XG4gIHhodHRwLnNlbmQoKTtcbiAgcmV0dXJuIHhodHRwLnJlc3BvbnNlWE1MO1xufVxuXG4gLy8gU2hvdWxkIHRoaXMgYmUgZXhwb3NlZCBvciBzaG91bGQgdGhpcyBiZSBtb3ZlZCB0byB0aGUgaGVscGVyIGZ1bmN0aW9ucyBzZWN0aW9uP1xuIGZ1bmN0aW9uIHRleHRUb1htbE9iamVjdCh0ZXh0KSB7XG4gICBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpIHtcbiAgICAgdmFyIGRvYyA9IG5ldyBBY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MRE9NJyk7XG4gICAgIGRvYy5hc3luYyA9ICdmYWxzZSc7XG4gICAgIGRvYy5sb2FkWE1MKHRleHQpO1xuICAgfSBlbHNlIHtcbiAgICAgdmFyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICAgdmFyIGRvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGV4dCwgJ3RleHQveG1sJyk7XG4gICB9XG4gICByZXR1cm4gZG9jO1xuIH1cbiAvLyBIZWxwZXIgZnVuY3Rpb25zIEVuZFxuXG4gdmFyIHNiZ25tbFRvSnNvbiwganNvblRvU2Jnbm1sLCBqc29uVG9Od3QsIHVpVXRpbGl0aWVzLCB0ZFRvSnNvbixcbiAgICAgc2lmVG9Kc29uLCBncmFwaFV0aWxpdGllcywgbGF5b3V0VG9UZXh0LCBud3RUb0pzb24sIGpzb25Ub1NpZixzYmdubWxUb0NkLGNkVG9TYmdubWwsc2Jnbm1sVG9TYm1sLHNibWxUb1NiZ25tbDtcbiB2YXIgdXBkYXRlR3JhcGg7XG4gdmFyIG9wdGlvbnMsIGN5O1xuXG4gZnVuY3Rpb24gZmlsZVV0aWxpdGllcyAocGFyYW0pIHtcbiAgIHNiZ25tbFRvSnNvbiA9IHBhcmFtLnNiZ25tbFRvSnNvbkNvbnZlcnRlcjtcbiAgIG53dFRvSnNvbiA9IHBhcmFtLm53dFRvSnNvbkNvbnZlcnRlcjtcbiAgIGpzb25Ub1NiZ25tbCA9IHBhcmFtLmpzb25Ub1NiZ25tbENvbnZlcnRlcjtcbiAgIGpzb25Ub053dCA9IHBhcmFtLmpzb25Ub053dENvbnZlcnRlcjtcbiAgIGpzb25Ub1NpZiA9IHBhcmFtLmpzb25Ub1NpZkNvbnZlcnRlcjtcbiAgIHVpVXRpbGl0aWVzID0gcGFyYW0udWlVdGlsaXRpZXM7XG4gICB0ZFRvSnNvbiA9IHBhcmFtLnRkVG9Kc29uQ29udmVydGVyO1xuICAgc2lmVG9Kc29uID0gcGFyYW0uc2lmVG9Kc29uQ29udmVydGVyO1xuICAgbGF5b3V0VG9UZXh0ID0gcGFyYW0ubGF5b3V0VG9UZXh0O1xuICAgZ3JhcGhVdGlsaXRpZXMgPSBwYXJhbS5ncmFwaFV0aWxpdGllcztcbiAgIHVwZGF0ZUdyYXBoID0gZ3JhcGhVdGlsaXRpZXMudXBkYXRlR3JhcGguYmluZChncmFwaFV0aWxpdGllcyk7XG4gICBvcHRpb25zID0gcGFyYW0ub3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMoKTtcbiAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgIHNiZ25tbFRvQ2QgPSBwYXJhbS5zYmdubWxUb0NkQ29udmVydGVyO1xuICAgY2RUb1NiZ25tbCA9IHBhcmFtLmNkVG9TYmdubWxDb252ZXJ0ZXI7XG4gICBzYmdubWxUb1NibWwgPSBwYXJhbS5zYmdubWxUb1NibWxDb252ZXJ0ZXI7XG4gICBzYm1sVG9TYmdubWwgPSBwYXJhbS5zYm1sVG9TYmdubWxDb252ZXJ0ZXI7XG4gfVxuXG4gZmlsZVV0aWxpdGllcy5sb2FkWE1MRG9jID0gbG9hZFhNTERvYztcblxuIGZpbGVVdGlsaXRpZXMuc2F2ZUFzUG5nID0gZnVuY3Rpb24oZmlsZW5hbWUsIHNjYWxlLCBiZywgbWF4V2lkdGgsIG1heEhlaWdodCkge1xuICAgaWYobWF4V2lkdGggfHwgbWF4SGVpZ2h0KSB7XG4gICAgIHZhciBwbmdDb250ZW50ID0gY3kucG5nKHtcbiAgICAgICBmdWxsOiB0cnVlLCBiZzogYmcsIFxuICAgICAgIG1heFdpZHRoOiBtYXhXaWR0aCwgbWF4SGVpZ2h0OiBtYXhIZWlnaHRcbiAgICAgfSk7XG4gICB9XG4gICBlbHNlIHtcbiAgICAgdmFyIHBuZ0NvbnRlbnQgPSBjeS5wbmcoe1xuICAgICAgIHNjYWxlOiBzY2FsZSB8fCAzLCBmdWxsOiB0cnVlLCBiZzogYmdcbiAgICAgfSk7XG4gICB9XG5cbiAgIC8vIHRoaXMgaXMgdG8gcmVtb3ZlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBuZ0NvbnRlbnQ6IGRhdGE6aW1nL3BuZztiYXNlNjQsXG4gICB2YXIgYjY0ZGF0YSA9IHBuZ0NvbnRlbnQuc3Vic3RyKHBuZ0NvbnRlbnQuaW5kZXhPZihcIixcIikgKyAxKTtcblxuICAgLy8gbG93ZXIgcXVhbGl0eSB3aGVuIHJlc3BvbnNlIGlzIGVtcHR5XG4gICBpZighYjY0ZGF0YSB8fCBiNjRkYXRhID09PSBcIlwiKXtcbiAgICAgcG5nQ29udGVudCA9IGN5LnBuZyh7bWF4V2lkdGg6IDE1MDAwLCBtYXhIZWlnaHQ6IDE1MDAwLCBmdWxsOiB0cnVlLCBiZzogYmd9KTtcbiAgICAgYjY0ZGF0YSA9IHBuZ0NvbnRlbnQuc3Vic3RyKHBuZ0NvbnRlbnQuaW5kZXhPZihcIixcIikgKyAxKTtcbiAgIH1cblxuICAgc2F2ZUFzKGI2NHRvQmxvYihiNjRkYXRhLCBcImltYWdlL3BuZ1wiKSwgZmlsZW5hbWUgfHwgXCJuZXR3b3JrLnBuZ1wiKTtcbiB9O1xuXG4gZmlsZVV0aWxpdGllcy5zYXZlQXNKcGcgPSBmdW5jdGlvbihmaWxlbmFtZSwgc2NhbGUsIGJnLCBtYXhXaWR0aCwgbWF4SGVpZ2h0LCBxdWFsaXR5KSB7XG4gICBpZihtYXhXaWR0aCB8fCBtYXhIZWlnaHQpIHtcbiAgICAgdmFyIGpwZ0NvbnRlbnQgPSBjeS5qcGcoe1xuICAgICAgIGZ1bGw6IHRydWUsIGJnOiBiZywgXG4gICAgICAgbWF4V2lkdGg6IG1heFdpZHRoLCBtYXhIZWlnaHQ6IG1heEhlaWdodCwgXG4gICAgICAgcXVhbGl0eTogcXVhbGl0eVxuICAgICB9KTtcbiAgIH1cbiAgIGVsc2Uge1xuICAgICB2YXIganBnQ29udGVudCA9IGN5LmpwZyh7XG4gICAgICAgc2NhbGU6IHNjYWxlIHx8IDMsIGZ1bGw6IHRydWUsIGJnOiBiZywgXG4gICAgICAgcXVhbGl0eTogcXVhbGl0eVxuICAgICB9KTtcbiAgIH1cbiAgIFxuICAgLy8gdGhpcyBpcyB0byByZW1vdmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgcG5nQ29udGVudDogZGF0YTppbWcvcG5nO2Jhc2U2NCxcbiAgIHZhciBiNjRkYXRhID0ganBnQ29udGVudC5zdWJzdHIoanBnQ29udGVudC5pbmRleE9mKFwiLFwiKSArIDEpO1xuXG4gICAvLyBsb3dlciBxdWFsaXR5IHdoZW4gcmVzcG9uc2UgaXMgZW1wdHlcbiAgIGlmKCFiNjRkYXRhIHx8IGI2NGRhdGEgPT09IFwiXCIpe1xuICAgICBqcGdDb250ZW50ID0gY3kuanBnKHttYXhXaWR0aDogMTUwMDAsIG1heEhlaWdodDogMTUwMDAsIGZ1bGw6IHRydWUsIGJnOiBiZ30pO1xuICAgICBiNjRkYXRhID0ganBnQ29udGVudC5zdWJzdHIoanBnQ29udGVudC5pbmRleE9mKFwiLFwiKSArIDEpO1xuICAgfVxuXG4gICBzYXZlQXMoYjY0dG9CbG9iKGI2NGRhdGEsIFwiaW1hZ2UvanBnXCIpLCBmaWxlbmFtZSB8fCBcIm5ldHdvcmsuanBnXCIpO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLnNhdmVBc1N2ZyA9IGZ1bmN0aW9uKGZpbGVuYW1lLCBzY2FsZSwgYmcsIG1heFdpZHRoLCBtYXhIZWlnaHQpIHtcbiAgIGlmIChtYXhXaWR0aCB8fCBtYXhIZWlnaHQpIHtcbiAgICAgdmFyIHN2Z0NvbnRlbnQgPSBjeS5zdmcoe1xuICAgICAgIGZ1bGw6IHRydWUsIGJnOiBiZywgXG4gICAgICAgbWF4V2lkdGg6IG1heFdpZHRoLCBtYXhIZWlnaHQ6IG1heEhlaWdodFxuICAgICB9KTtcbiAgIH1cbiAgIGVsc2Uge1xuICAgICB2YXIgc3ZnQ29udGVudCA9IGN5LnN2Zyh7c2NhbGU6IHNjYWxlIHx8IDEsIGZ1bGw6IHRydWUsIGJnOiBiZ30pO1xuICAgfVxuICAgc2F2ZUFzKG5ldyBCbG9iKFtzdmdDb250ZW50XSwge3R5cGU6XCJpbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLThcIn0pLCBmaWxlbmFtZSB8fCBcIm5ldHdvcmsuc3ZnXCIpO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWRTYW1wbGUgPSBmdW5jdGlvbihmaWxlbmFtZSwgZm9sZGVycGF0aCwgY2FsbGJhY2spIHtcbiAgIHZhciBmaWxlID0gKGZvbGRlcnBhdGggfHwgJ3NhbXBsZS1hcHAvc2FtcGxlcy8nKSArIGZpbGVuYW1lO1xuXG4gICB1aVV0aWxpdGllcy5zdGFydFNwaW5uZXIoXCJsb2FkLXNwaW5uZXJcIik7XG4gICAvLyBVc2VycyBtYXkgd2FudCB0byBkbyBjdXN0b21pemVkIHRoaW5ncyB3aGlsZSBhIHNhbXBsZSBpcyBiZWluZyBsb2FkZWRcbiAgIC8vIFRyaWdnZXIgYW4gZXZlbnQgZm9yIHRoaXMgcHVycG9zZSBhbmQgc3BlY2lmeSB0aGUgJ2ZpbGVuYW1lJyBhcyBhbiBldmVudCBwYXJhbWV0ZXJcbiAgICQoZG9jdW1lbnQpLnRyaWdnZXIoIFwic2JnbnZpekxvYWRTYW1wbGVcIiwgWyBmaWxlbmFtZSwgY3kgXSApOyAvLyBBbGlhc2VzIGZvciBzYmdudml6TG9hZFNhbXBsZVN0YXJ0XG4gICAkKGRvY3VtZW50KS50cmlnZ2VyKCBcInNiZ252aXpMb2FkU2FtcGxlU3RhcnRcIiwgWyBmaWxlbmFtZSwgY3kgXSApO1xuICAgdmFyIHRleHQgPSBsb2FkVGV4dERvYyhmaWxlKTtcbiAgIHZhciBtYXRjaFJlc3VsdCA9IHRleHQubWF0Y2goXCI8cmVuZGVySW5mb3JtYXRpb25bXl0qPC9yZW5kZXJJbmZvcm1hdGlvbj5cIik7XG4gICBpZihtYXRjaFJlc3VsdCAhPSBudWxsKXtcbiAgICAgdmFyIHJlbmRlckluZm9TdHJpbmcgPSBtYXRjaFJlc3VsdFswXTtcbiAgICAgdmFyIHJlbmRlckluZm9TdHJpbmdDb3B5ID0gKCcgJyArIHJlbmRlckluZm9TdHJpbmcpLnNsaWNlKDEpO1xuICAgICBjb25zdCByZWdleCA9IC9cXHMoW1xcU10rKShbXFxzXSopPS9nO1xuICAgICB2YXIgcmVzdWx0O1xuICAgICB2YXIgbWF0Y2hlcyA9IFtdOyBcbiAgICAgd2hpbGUocmVzdWx0ID0gcmVnZXguZXhlYyhyZW5kZXJJbmZvU3RyaW5nKSkge1xuICAgICAgIG1hdGNoZXMucHVzaChyZXN1bHRbMF0pO1xuICAgICB9O1xuICAgICBtYXRjaGVzLmZvckVhY2goZnVuY3Rpb24obWF0Y2gpe1xuICAgICAgIHJlbmRlckluZm9TdHJpbmcgPSByZW5kZXJJbmZvU3RyaW5nLnJlcGxhY2UobWF0Y2ggLCB0ZXh0VXRpbGl0aWVzLkZyb21LZWJhYlRvQ2FtZWxDYXNlKG1hdGNoKSk7XG4gICAgIH0pOyAgICAgIFxuICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHJlbmRlckluZm9TdHJpbmdDb3B5LCByZW5kZXJJbmZvU3RyaW5nKTtcbiAgICB9XG4gICAgICB2YXIgeG1sT2JqZWN0ID0gdGV4dFRvWG1sT2JqZWN0KHRleHQpO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHVwZGF0ZUdyYXBoKG53dFRvSnNvbi5jb252ZXJ0KHhtbE9iamVjdCkpO1xuICAgICAgICBmaWxlVXRpbGl0aWVzLmNvbGxhcHNlTWFya2VkTm9kZXMoKTtcbiAgICAgICAgdWlVdGlsaXRpZXMuZW5kU3Bpbm5lcihcImxvYWQtc3Bpbm5lclwiKTtcbiAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlciggXCJzYmdudml6TG9hZFNhbXBsZUVuZFwiLCBbIGZpbGVuYW1lLCBjeSBdICk7IC8vIFRyaWdnZXIgYW4gZXZlbnQgc2lnbmFsaW5nIHRoYXQgYSBzYW1wbGUgaXMgbG9hZGVkXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICBjYWxsYmFjaygpOyB9XG4gICAgICB9LDApO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWRTSUZGaWxlID0gZnVuY3Rpb24oZmlsZSwgbGF5b3V0QnksIGNhbGxiYWNrKSB7XG4gICB2YXIgY29udmVydCA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuICAgICByZXR1cm4gc2lmVG9Kc29uLmNvbnZlcnQodGV4dCk7XG4gICB9O1xuXG4gICB2YXIgcnVuTGF5b3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgIGlmICggbGF5b3V0QnkgKSB7XG4gICAgICAgaWYgKCB0eXBlb2YgbGF5b3V0QnkgPT09ICdmdW5jdGlvbicgKSB7XG4gICAgICAgICBsYXlvdXRCeSgpO1xuICAgICAgIH1cbiAgICAgICBlbHNlIHtcbiAgICAgICAgIHZhciBsYXlvdXQgPSBjeS5sYXlvdXQoIGxheW91dEJ5ICk7XG5cbiAgICAgICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG5lZWQgdG8gbWFrZSB0aGlzIGlmIGNoZWNrXG4gICAgICAgICBpZiAoIGxheW91dCAmJiBsYXlvdXQucnVuICkge1xuICAgICAgICAgICBsYXlvdXQucnVuKCk7XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9XG5cbiAgICAgY3kuZml0KCBjeS5lbGVtZW50cyhcIjp2aXNpYmxlXCIpLCAyMCApO1xuXG4gICB9O1xuXG4gICBmaWxlVXRpbGl0aWVzLmxvYWRGaWxlKCBmaWxlLCBjb252ZXJ0LCB1bmRlZmluZWQsIGNhbGxiYWNrLCB1bmRlZmluZWQsIHJ1bkxheW91dCApO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWRUREZpbGUgPSBmdW5jdGlvbiBmdW5jdGlvbk5hbWUoZmlsZSwgY2FsbGJhY2spIHtcbiAgIHZhciBjb252ZXJ0ID0gZnVuY3Rpb24oIHRleHQgKSB7XG4gICAgIHJldHVybiB0ZFRvSnNvbi5jb252ZXJ0KHRleHQpO1xuICAgfTtcblxuICAgZmlsZVV0aWxpdGllcy5sb2FkRmlsZSggZmlsZSwgY29udmVydCwgdW5kZWZpbmVkLCBjYWxsYmFjayApO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWRTQkdOTUxGaWxlID0gZnVuY3Rpb24oZmlsZSwgY2FsbGJhY2sxLCBjYWxsYmFjazIpIHtcbiAgIHZhciBjb252ZXJ0ID0gZnVuY3Rpb24oIHRleHQgKSB7XG4gICAgIHJldHVybiBzYmdubWxUb0pzb24uY29udmVydCh0ZXh0VG9YbWxPYmplY3QodGV4dCkpO1xuICAgfTtcblxuICAgZmlsZVV0aWxpdGllcy5sb2FkRmlsZSggZmlsZSwgY29udmVydCwgY2FsbGJhY2sxLCBjYWxsYmFjazIsIGZpbGVVdGlsaXRpZXMuY29sbGFwc2VNYXJrZWROb2RlcyApO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWROd3RGaWxlID0gZnVuY3Rpb24oZmlsZSwgY2FsbGJhY2sxLCBjYWxsYmFjazIsIHVybFBhcmFtcykge1xuICAgdmFyIGNvbnZlcnQgPSBmdW5jdGlvbiggdGV4dCApIHtcbiAgICAgcmV0dXJuIG53dFRvSnNvbi5jb252ZXJ0KHRleHRUb1htbE9iamVjdCh0ZXh0KSwgdXJsUGFyYW1zKTtcbiAgIH07XG5cbiAgIGZpbGVVdGlsaXRpZXMubG9hZEZpbGUoIGZpbGUsIGNvbnZlcnQsIGNhbGxiYWNrMSwgY2FsbGJhY2syLCBmaWxlVXRpbGl0aWVzLmNvbGxhcHNlTWFya2VkTm9kZXMgKTtcbiB9O1xuXG4gLy8gY29sbGFwc2UgdGhlIG5vZGVzIHdob3NlIGNvbGxhcHNlIGRhdGEgZmllbGQgaXMgc2V0XG4gZmlsZVV0aWxpdGllcy5jb2xsYXBzZU1hcmtlZE5vZGVzID0gZnVuY3Rpb24oKSB7XG4gICAvLyBjb2xsYXBzZSBub2Rlc1xuICAgdmFyIG5vZGVzVG9Db2xsYXBzZSA9IGN5Lm5vZGVzKFwiW2NvbGxhcHNlXVwiKTtcbiAgIGlmIChub2Rlc1RvQ29sbGFwc2UubGVuZ3RoID4gMCApe1xuICAgICBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0JykuY29sbGFwc2Uobm9kZXNUb0NvbGxhcHNlLCB7bGF5b3V0Qnk6IG51bGx9KTtcblxuICAgICBub2Rlc1RvQ29sbGFwc2UuZm9yRWFjaChmdW5jdGlvbihlbGUsIGksIGVsZXMpe1xuICAgICAgIGVsZS5wb3NpdGlvbihlbGUuZGF0YShcInBvc2l0aW9uQmVmb3JlU2F2aW5nXCIpKTtcbiAgICAgfSk7XG4gICAgIG5vZGVzVG9Db2xsYXBzZS5yZW1vdmVEYXRhKFwicG9zaXRpb25CZWZvcmVTYXZpbmdcIik7XG4gICB9XG4gfTtcblxuIC8qXG4gICBjYWxsYmFjayBpcyBhIGZ1bmN0aW9uIHJlbW90ZWx5IGRlZmluZWQgdG8gYWRkIHNwZWNpZmljIGJlaGF2aW9yIHRoYXQgaXNuJ3QgaW1wbGVtZW50ZWQgaGVyZS5cbiAgIGl0IGlzIGNvbXBsZXRlbHkgb3B0aW9uYWwuXG4gICBzaWduYXR1cmU6IGNhbGxiYWNrKHRleHRYbWwpXG4gKi9cbiBmaWxlVXRpbGl0aWVzLmxvYWRGaWxlID0gZnVuY3Rpb24oZmlsZSwgY29udmVydEZjbiwgY2FsbGJhY2sxLCBjYWxsYmFjazIsIGNhbGxiYWNrMywgY2FsbGJhY2s0KSB7XG4gICB2YXIgc2VsZiA9IHRoaXM7XG4gICB1aVV0aWxpdGllcy5zdGFydFNwaW5uZXIoXCJsb2FkLWZpbGUtc3Bpbm5lclwiKTtcblxuICAgdmFyIHRleHRUeXBlID0gL3RleHQuKi87XG5cbiAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgdmFyIHRleHQgPSB0aGlzLnJlc3VsdDtcbiAgICB2YXIgbWF0Y2hSZXN1bHQgPSB0ZXh0Lm1hdGNoKFwiPHJlbmRlckluZm9ybWF0aW9uW15dKjwvcmVuZGVySW5mb3JtYXRpb24+XCIpO1xuICAgIGlmKG1hdGNoUmVzdWx0ICE9IG51bGwpe1xuICAgIHZhciBpbWFnZXNFbGVtZW50TWF0Y2ggPSB0ZXh0Lm1hdGNoKFwiPGxpc3RPZkJhY2tncm91bmRJbWFnZXNbXl0qPC9saXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzPlwiKTtcbiAgICB2YXIgaW1hZ2VzRWxlbWVudDtcbiAgICBpZihpbWFnZXNFbGVtZW50TWF0Y2ggIT0gbnVsbCl7XG4gICAgICBpbWFnZXNFbGVtZW50ID0gaW1hZ2VzRWxlbWVudE1hdGNoWzBdO1xuICAgIH1cbiAgICB2YXIgcmVuZGVySW5mb1N0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgIHZhciByZW5kZXJJbmZvU3RyaW5nQ29weSA9ICgnICcgKyByZW5kZXJJbmZvU3RyaW5nKS5zbGljZSgxKTtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gL1xccyhbXFxTXSspKFtcXHNdKik9L2c7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgdmFyIG1hdGNoZXMgPSBbXTsgXG4gICAgICB3aGlsZShyZXN1bHQgPSByZWdleC5leGVjKHJlbmRlckluZm9TdHJpbmcpKSB7XG4gICAgICAgIG1hdGNoZXMucHVzaChyZXN1bHRbMF0pO1xuICAgICAgfTtcbiAgICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbihtYXRjaCl7XG4gICAgICAgIHJlbmRlckluZm9TdHJpbmcgPSByZW5kZXJJbmZvU3RyaW5nLnJlcGxhY2UobWF0Y2ggLCB0ZXh0VXRpbGl0aWVzLkZyb21LZWJhYlRvQ2FtZWxDYXNlKG1hdGNoKSk7XG4gICAgICB9KTsgICAgICBcbiAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVuZGVySW5mb1N0cmluZ0NvcHksIHJlbmRlckluZm9TdHJpbmcpO1xuICAgICAgdmFyIGltYWdlc0VsZW1lbnRNYXRjaERpcnR5ID0gdGV4dC5tYXRjaChcIjxsaXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzW15dKjwvbGlzdE9mQmFja2dyb3VuZEltYWdlcz5cIik7XG4gICAgICBpZihpbWFnZXNFbGVtZW50TWF0Y2hEaXJ0eSAhPSBudWxsKXtcbiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShpbWFnZXNFbGVtZW50TWF0Y2hEaXJ0eVswXSxpbWFnZXNFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrMSAhPT0gJ3VuZGVmaW5lZCcpIGNhbGxiYWNrMSh0ZXh0KTtcblxuICAgICAgIHZhciBjeUdyYXBoO1xuICAgICAgIHRyeSB7XG4gICAgICAgICBjeUdyYXBoID0gY29udmVydEZjbiggdGV4dCApO1xuICAgICAgICAgLy8gVXNlcnMgbWF5IHdhbnQgdG8gZG8gY3VzdG9taXplZCB0aGluZ3Mgd2hpbGUgYW4gZXh0ZXJuYWwgZmlsZSBpcyBiZWluZyBsb2FkZWRcbiAgICAgICAgIC8vIFRyaWdnZXIgYW4gZXZlbnQgZm9yIHRoaXMgcHVycG9zZSBhbmQgc3BlY2lmeSB0aGUgJ2ZpbGVuYW1lJyBhcyBhbiBldmVudCBwYXJhbWV0ZXJcbiAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoIFwic2JnbnZpekxvYWRGaWxlXCIsIFsgZmlsZS5uYW1lLCBjeSBdICk7IC8vIEFsaWFzZXMgZm9yIHNiZ252aXpMb2FkRmlsZVN0YXJ0XG4gICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCBcInNiZ252aXpMb2FkRmlsZVN0YXJ0XCIsIFsgZmlsZS5uYW1lLCBjeSBdICk7XG4gICAgICAgfVxuICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgIHVpVXRpbGl0aWVzLmVuZFNwaW5uZXIoXCJsb2FkLWZpbGUtc3Bpbm5lclwiKTtcbiAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrMiAhPT0gJ3VuZGVmaW5lZCcpIGNhbGxiYWNrMigpO1xuICAgICAgICAgcmV0dXJuO1xuICAgICAgIH1cblxuICAgICAgIHVwZGF0ZUdyYXBoKGN5R3JhcGgpO1xuXG4gICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjazMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICBjYWxsYmFjazMoKTtcbiAgICAgICB9XG5cbiAgICAgICB1aVV0aWxpdGllcy5lbmRTcGlubmVyKFwibG9hZC1maWxlLXNwaW5uZXJcIik7XG4gICAgICAgJChkb2N1bWVudCkudHJpZ2dlciggXCJzYmdudml6TG9hZEZpbGVFbmRcIiwgWyBmaWxlLm5hbWUsIGN5IF0gKTsgLy8gVHJpZ2dlciBhbiBldmVudCBzaWduYWxpbmcgdGhhdCBhIGZpbGUgaXMgbG9hZGVkXG5cbiAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrNCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgIGNhbGxiYWNrNCgpO1xuICAgICAgIH1cbiAgICAgfSwgMCk7XG4gICB9O1xuXG4gICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiB9O1xuXG4gZmlsZVV0aWxpdGllcy5sb2FkU0JHTk1MVGV4dCA9IGZ1bmN0aW9uKHRleHREYXRhLCB0aWxlSW5mb0JveGVzLCBmaWxlbmFtZSwgY3ksIHVybFBhcmFtcyl7XG4gICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgdXBkYXRlR3JhcGgoc2Jnbm1sVG9Kc29uLmNvbnZlcnQodGV4dFRvWG1sT2JqZWN0KHRleHREYXRhKSwgdXJsUGFyYW1zKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRpbGVJbmZvQm94ZXMpO1xuICAgICAgICAgJChkb2N1bWVudCkudHJpZ2dlcihcInNiZ252aXpMb2FkRmlsZUVuZFwiLCAgW2ZpbGVuYW1lLCBjeV0pO1xuICAgICAgICAgdWlVdGlsaXRpZXMuZW5kU3Bpbm5lcihcImxvYWQtZmlsZS1zcGlubmVyXCIpO1xuICAgICB9LCAwKTtcblxuIH07XG5cbiAvLyBzdXBwb3J0ZWQgdmVyc2lvbnMgYXJlIGVpdGhlciAwLjIgb3IgMC4zXG4gZmlsZVV0aWxpdGllcy5zYXZlQXNTYmdubWwgPSBmdW5jdGlvbihmaWxlbmFtZSwgdmVyc2lvbiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKSB7XG4gICB2YXIgc2Jnbm1sVGV4dCA9IGpzb25Ub1NiZ25tbC5jcmVhdGVTYmdubWwoZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcyk7XG4gICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtzYmdubWxUZXh0XSwge1xuICAgICB0eXBlOiBcInRleHQvcGxhaW47Y2hhcnNldD11dGYtODtcIixcbiAgIH0pO1xuICAgc2F2ZUFzKGJsb2IsIGZpbGVuYW1lKTtcbiB9O1xuXG4gLy8gc3VwcG9ydGVkIHZlcnNpb25zIGFyZSBlaXRoZXIgMC4yIG9yIDAuM1xuIGZpbGVVdGlsaXRpZXMuc2F2ZUFzTnd0ID0gZnVuY3Rpb24oZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcykge1xuICAgdmFyIHNiZ25tbFRleHQgPSBqc29uVG9Od3QuY3JlYXRlTnd0KGZpbGVuYW1lLCB2ZXJzaW9uLCByZW5kZXJJbmZvLCBtYXBQcm9wZXJ0aWVzLCBub2RlcywgZWRnZXMpO1xuICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbc2Jnbm1sVGV4dF0sIHtcbiAgICAgdHlwZTogXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTg7XCIsXG4gICB9KTtcbiAgIHNhdmVBcyhibG9iLCBmaWxlbmFtZSk7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMuc2F2ZUFzQ2VsbERlc2lnbmVyID0gZnVuY3Rpb24oZmlsZW5hbWUsIGVycm9yQ2FsbGJhY2spe1xuICB1aVV0aWxpdGllcy5zdGFydFNwaW5uZXIoXCJsb2FkLXNwaW5uZXJcIik7XG4gIHZhciBzYmdubWwgPSBqc29uVG9TYmdubWwuY3JlYXRlU2Jnbm1sKCk7IFxuICB0aGlzLmNvbnZlcnRTYmdubWxUb0NEKHNiZ25tbCwgZnVuY3Rpb24oZGF0YSl7XG4gICAgaWYoZGF0YSA9PSBudWxsKXtcbiAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICB9ZWxzZXtcbiAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICAgIHR5cGU6IFwidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04O1wiLFxuICAgICAgfSk7XG4gICAgICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpOyBcbiAgICB9XG4gICAgdWlVdGlsaXRpZXMuZW5kU3Bpbm5lcihcImxvYWQtc3Bpbm5lclwiKTtcbiAgICBcbiAgfSk7XG4gIFxuXG4gfVxuXG4gZmlsZVV0aWxpdGllcy5sb2FkQ2VsbERlc2lnbmVyID0gZnVuY3Rpb24oZmlsZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKXtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7IFxuICBcbiAgICB0aGlzLmNvbnZlcnRDRFRvU2Jnbm1sKGUudGFyZ2V0LnJlc3VsdCwgZnVuY3Rpb24oZGF0YSl7XG4gICAgICB1aVV0aWxpdGllcy5lbmRTcGlubmVyKFwibG9hZC1zcGlubmVyXCIpO1xuICAgICAgaWYoZGF0YSA9PSBudWxsKXtcbiAgICAgICAgZXJyb3JDYWxsYmFjaygpO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfS5iaW5kKHRoaXMpO1xuICB1aVV0aWxpdGllcy5zdGFydFNwaW5uZXIoXCJsb2FkLXNwaW5uZXJcIik7XG4gIHJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuIH1cblxuIGZpbGVVdGlsaXRpZXMuc2F2ZUFzU2JtbCA9IGZ1bmN0aW9uKGZpbGVuYW1lLGVycm9yQ2FsbGJhY2spe1xuICB1aVV0aWxpdGllcy5zdGFydFNwaW5uZXIoXCJsb2FkLXNwaW5uZXJcIik7XG4gIHZhciBzYmdubWwgPSB0aGlzLmNvbnZlcnRTYmduKCk7XG4gIFxuICB0aGlzLmNvbnZlcnRTYmdubWxUb1NibWwoc2Jnbm1sLCBmdW5jdGlvbihkYXRhKXtcbiAgICBcbiAgICBpZighZGF0YS5yZXN1bHQpe1xuICAgICAgZXJyb3JDYWxsYmFjayhzYmdubWwsZGF0YS5lcnJvcik7XG4gICAgfWVsc2UgaWYoIGRhdGEubWVzc2FnZS5pbmRleE9mKFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIpICE9PSAtMSlcbiAgICB7XG4gICAgICBlcnJvckNhbGxiYWNrKHNiZ25tbCxkYXRhLm1lc3NhZ2UpO1xuICAgIH1lbHNleyAgICBcbiAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGEubWVzc2FnZV0sIHtcbiAgICAgICAgdHlwZTogXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTg7XCIsXG4gICAgICB9KTtcbiAgICAgIHNhdmVBcyhibG9iLCBmaWxlbmFtZSk7IFxuICAgICAgXG4gICAgfVxuXG4gICAgdWlVdGlsaXRpZXMuZW5kU3Bpbm5lcihcImxvYWQtc3Bpbm5lclwiKTtcbiAgICBcbiAgfSk7XG5cbiB9XG5cbiBmaWxlVXRpbGl0aWVzLmxvYWRTYm1sID0gZnVuY3Rpb24oZmlsZSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKXtcbiAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uIChlKSB7IFxuICAgIFxuICAgIHRoaXMuY29udmVydFNibWxUb1NiZ25tbChlLnRhcmdldC5yZXN1bHQsIGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgdWlVdGlsaXRpZXMuZW5kU3Bpbm5lcihcImxvYWQtc3Bpbm5lclwiKTtcbiAgICAgIGlmKGRhdGEgPT0gbnVsbCl7XG4gICAgICAgIGVycm9yQ2FsbGJhY2soKTtcbiAgICAgIH1lbHNle1xuICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0uYmluZCh0aGlzKTtcbiAgdWlVdGlsaXRpZXMuc3RhcnRTcGlubmVyKFwibG9hZC1zcGlubmVyXCIpO1xuICByZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcblxuIH1cblxuXG4gZmlsZVV0aWxpdGllcy5jb252ZXJ0U2Jnbj0gZnVuY3Rpb24oZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcykge1xuICB2YXIgc2Jnbm1sVGV4dCA9IGpzb25Ub1NiZ25tbC5jcmVhdGVTYmdubWwoZmlsZW5hbWUsIFwicGxhaW5cIiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKTtcbiBcbiAgcmV0dXJuIHNiZ25tbFRleHQ7XG59O1xuXG4gZmlsZVV0aWxpdGllcy5leHBvcnRMYXlvdXREYXRhID0gZnVuY3Rpb24oZmlsZW5hbWUsIGJ5TmFtZSkge1xuICAgdmFyIGxheW91dFRleHQgPSBsYXlvdXRUb1RleHQuY29udmVydCggYnlOYW1lICk7XG5cbiAgIHZhciBibG9iID0gbmV3IEJsb2IoW2xheW91dFRleHRdLCB7XG4gICAgIHR5cGU6IFwidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04O1wiLFxuICAgfSk7XG4gICBzYXZlQXMoYmxvYiwgZmlsZW5hbWUpO1xuIH07XG5cbiBmaWxlVXRpbGl0aWVzLnNhdmVBc1BsYWluU2lmID0gZnVuY3Rpb24oZmlsZW5hbWUpIHtcbiAgIHZhciB0ZXh0ID0ganNvblRvU2lmLmNvbnZlcnQoKTtcblxuICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbdGV4dF0sIHtcbiAgICAgdHlwZTogXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTg7XCIsXG4gICB9KTtcbiAgIHNhdmVBcyhibG9iLCBmaWxlbmFtZSk7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMuY29udmVydFNiZ25tbFRleHRUb0pzb24gPSBmdW5jdGlvbihzYmdubWxUZXh0KXtcbiAgICAgcmV0dXJuIHNiZ25tbFRvSnNvbi5jb252ZXJ0KHRleHRUb1htbE9iamVjdChzYmdubWxUZXh0KSk7XG4gfTtcblxuIGZpbGVVdGlsaXRpZXMuY29udmVydFNpZlRleHRUb0pzb24gPSBmdW5jdGlvbihzaWZUZXh0KXtcbiAgICAgICAgcmV0dXJuIHNpZlRvSnNvbi5jb252ZXJ0KHNpZlRleHQpO1xuIH07XG4gXG5maWxlVXRpbGl0aWVzLmNyZWF0ZUpzb25Gcm9tU0JHTiA9IGZ1bmN0aW9uKCl7XG5cblxuICAgIHZhciBzYmdubWxUZXh0ID0ganNvblRvU2Jnbm1sLmNyZWF0ZVNiZ25tbCgpO1xuICAgIHJldHVybiBzYmdubWxUb0pzb24uY29udmVydCh0ZXh0VG9YbWxPYmplY3Qoc2Jnbm1sVGV4dCkpO1xufTtcblxuZmlsZVV0aWxpdGllcy5jcmVhdGVKc29uRnJvbVNpZiA9IGZ1bmN0aW9uKCl7XG5cbiAgICB2YXIgc2lmVGV4dCA9IGpzb25Ub1NpZi5jb252ZXJ0KCk7XG4gICAgcmV0dXJuIHNpZlRvSnNvbi5jb252ZXJ0KHNpZlRleHQpO1xuICAgIFxufTtcblxuZmlsZVV0aWxpdGllcy5jb252ZXJ0U2Jnbm1sVG9DRCA9IGZ1bmN0aW9uKHNiZ25tbCwgY2FsbGJhY2spe1xuICAgXG4gIHJldHVybiBzYmdubWxUb0NkLmNvbnZlcnQoc2Jnbm1sLGNhbGxiYWNrKTtcbn07XG5cbmZpbGVVdGlsaXRpZXMuY29udmVydFNiZ25tbFRvU2JtbCA9IGZ1bmN0aW9uKHNiZ25tbCwgY2FsbGJhY2spe1xuICAgXG4gIHJldHVybiBzYmdubWxUb1NibWwuY29udmVydChzYmdubWwsY2FsbGJhY2spO1xufTtcblxuZmlsZVV0aWxpdGllcy5jb252ZXJ0U2JtbFRvU2Jnbm1sID0gZnVuY3Rpb24oc2JtbCwgY2FsbGJhY2spe1xuICByZXR1cm4gc2JtbFRvU2Jnbm1sLmNvbnZlcnQoc2JtbCxjYWxsYmFjayk7XG59XG5maWxlVXRpbGl0aWVzLmNvbnZlcnRDRFRvU2Jnbm1sID0gZnVuY3Rpb24oeG1sLGNhbGxiYWNrKXtcbiAgcmV0dXJuIGNkVG9TYmdubWwuY29udmVydCh4bWwsY2FsbGJhY2spO1xufVxuXG5cbiByZXR1cm4gZmlsZVV0aWxpdGllcztcbn07XG4iLCIvKlxuICogQ29tbW9uIHV0aWxpdGllcyBmb3Igc2JnbnZpeiBncmFwaHNcbiAqL1xuXG52YXIgY2xhc3NlcyA9IHJlcXVpcmUoJy4vY2xhc3NlcycpO1xudmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpO1xudmFyIGxpYnMgPSBsaWJVdGlsaXRpZXMuZ2V0TGlicygpO1xudmFyIGpRdWVyeSA9ICQgPSBsaWJzLmpRdWVyeTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBvcHRpb25VdGlsaXRpZXM7XG4gIHZhciBvcHRpb25zLCBjeTtcblxuICBmdW5jdGlvbiBncmFwaFV0aWxpdGllcyAocGFyYW0pIHtcbiAgICBvcHRpb25VdGlsaXRpZXMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXM7XG4gICAgb3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG4gICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpOyAgICBcbiAgfVxuXG4gIC8vIFRPRE8gbWFrZSB0aGVzZSBpbml0aWFsIHZhbHVlcyB1c2VyIG9wdGlvbnMgaW5zdGVhZCBvZiBoYXJkY29kaW5nIHRoZW0gaGVyZVxuICBncmFwaFV0aWxpdGllcy5wb3J0c0VuYWJsZWQgPSB0cnVlO1xuICBncmFwaFV0aWxpdGllcy5jb21wb3VuZFNpemVzQ29uc2lkZXJlZCA9IHRydWU7XG5cbiAgZ3JhcGhVdGlsaXRpZXMuZGlzYWJsZVBvcnRzID0gZnVuY3Rpb24oKSB7XG4gICAgZ3JhcGhVdGlsaXRpZXMucG9ydHNFbmFibGVkID0gZmFsc2U7XG4gICAgXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuICBncmFwaFV0aWxpdGllcy5lbmFibGVQb3J0cyA9IGZ1bmN0aW9uKCkge1xuICAgIGdyYXBoVXRpbGl0aWVzLnBvcnRzRW5hYmxlZCA9IHRydWU7XG4gICAgXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuICBncmFwaFV0aWxpdGllcy5hcmVQb3J0c0VuYWJsZWQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZ3JhcGhVdGlsaXRpZXMucG9ydHNFbmFibGVkO1xuICB9O1xuXG4gIGdyYXBoVXRpbGl0aWVzLmNvbnNpZGVyQ29tcG91bmRTaXplcyA9IGZ1bmN0aW9uKCkge1xuICAgIGdyYXBoVXRpbGl0aWVzLmNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkID0gdHJ1ZTtcbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIGdyYXBoVXRpbGl0aWVzLm9taXRDb21wb3VuZFNpemVzID0gZnVuY3Rpb24oKSB7XG4gICAgZ3JhcGhVdGlsaXRpZXMuY29tcG91bmRTaXplc0NvbnNpZGVyZWQgPSBmYWxzZTtcbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIGdyYXBoVXRpbGl0aWVzLmFyZUNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGdyYXBoVXRpbGl0aWVzLmNvbXBvdW5kU2l6ZXNDb25zaWRlcmVkID09IHRydWU7XG4gIH07XG5cbiAgZ3JhcGhVdGlsaXRpZXMudXBkYXRlR3JhcGggPSBmdW5jdGlvbihjeUdyYXBoLCBjYWxsYmFjaywgbGF5b3V0T3B0aW9ucywgdGlsZUluZm9Cb3hlcykge1xuICAgXG5cbiAgICB2YXIgaXNMYXlvdXRSZXF1aXJlZDtcbiAgICBpZihsYXlvdXRPcHRpb25zID09PSB1bmRlZmluZWQpe1xuICAgICAgaXNMYXlvdXRSZXF1aXJlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgaXNMYXlvdXRSZXF1aXJlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgJChkb2N1bWVudCkudHJpZ2dlciggXCJ1cGRhdGVHcmFwaFN0YXJ0XCIsIGN5ICk7XG4gICAgLy8gUmVzZXQgdW5kby9yZWRvIHN0YWNrIGFuZCBidXR0b25zIHdoZW4gYSBuZXcgZ3JhcGggaXMgbG9hZGVkXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkucmVzZXQoKTtcbiAgLy8gICAgdGhpcy5yZXNldFVuZG9SZWRvQnV0dG9ucygpO1xuICAgIH1cblxuICAgIGN5LnN0YXJ0QmF0Y2goKTtcbiAgICAvLyBjbGVhciBkYXRhXG4gICAgY3kucmVtb3ZlKCcqJyk7XG4gICAgY3kuYWRkKGN5R3JhcGgpO1xuXG4gICAgLy9hZGQgcG9zaXRpb24gaW5mb3JtYXRpb24gdG8gZGF0YSBmb3IgcHJlc2V0IGxheW91dFxuICAgIHZhciBwb3NpdGlvbk1hcCA9IHt9O1xuICAgIGN5Lm5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgeFBvcyA9IG5vZGUuZGF0YSgnYmJveCcpLng7XG4gICAgICB2YXIgeVBvcyA9IG5vZGUuZGF0YSgnYmJveCcpLnk7XG4gICAgICBwb3NpdGlvbk1hcFtub2RlLmRhdGEoJ2lkJyldID0geyd4JzogeFBvcywgJ3knOiB5UG9zfTtcblxuICAgICAgLy8gYXNzaWduIGNvcnJlY3QgcGFyZW50cyB0byBpbmZvIGJveGVzXG4gICAgICB2YXIgc3RhdGVzYW5kaW5mb3MgPSBub2RlLmRhdGEoJ3N0YXRlc2FuZGluZm9zJyk7XG4gICAgICBmb3IgKHZhciBqPTA7IGogPCBzdGF0ZXNhbmRpbmZvcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjbGFzc2VzLmdldEF1eFVuaXRDbGFzcyhzdGF0ZXNhbmRpbmZvc1tqXSkuc2V0UGFyZW50UmVmKHN0YXRlc2FuZGluZm9zW2pdLCBub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG4gICAgLy90aGlzLnJlZnJlc2hQYWRkaW5ncygpOyAvLyBSZWNhbGN1bGF0ZXMvcmVmcmVzaGVzIHRoZSBjb21wb3VuZCBwYWRkaW5nc1xuICAgIGN5LmVuZEJhdGNoKCk7XG5cbiAgICBpZihpc0xheW91dFJlcXVpcmVkKSB7XG4gICAgICB2YXIgcHJlZmVyZW5jZXMgPSB7fTtcbiAgICAgIGlmKGN5Lm5vZGVzKCkubGVuZ3RoID4gMzAwMCB8fCBjeS5lZGdlcygpLmxlbmd0aCA+IDMwMDApIHtcbiAgICAgICAgcHJlZmVyZW5jZXMucXVhbGl0eSA9IFwiZHJhZnRcIjtcbiAgICAgIH1cbiAgICAgIHByZWZlcmVuY2VzLmFuaW1hdGUgPSBmYWxzZTtcbiAgICAgIHByZWZlcmVuY2VzLnJhbmRvbWl6ZSA9IHRydWU7XG4gICAgICBwcmVmZXJlbmNlcyA9ICQuZXh0ZW5kKHt9LCBsYXlvdXRPcHRpb25zLCBwcmVmZXJlbmNlcyk7XG4gICAgICB2YXIgbGF5b3V0ID0gY3kubGF5b3V0KHByZWZlcmVuY2VzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbGF5b3V0ID0gY3kubGF5b3V0KHtcbiAgICAgICAgbmFtZTogJ3ByZXNldCcsXG4gICAgICAgIHBvc2l0aW9uczogcG9zaXRpb25NYXAsXG4gICAgICAgIGZpdDogdHJ1ZSxcbiAgICAgICAgcGFkZGluZzogMjBcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENoZWNrIHRoaXMgZm9yIGN5dG9zY2FwZS5qcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKGxheW91dCAmJiBsYXlvdXQucnVuKSB7XG4gICAgICBsYXlvdXQucnVuKCk7XG4gICAgfVxuXG4gICAgdmFyIHBlcmZvcm1MYXlvdXQgPSBmdW5jdGlvbigpe1xuICAgICAgY3kuZml0KCBjeS5lbGVtZW50cyhcIjp2aXNpYmxlXCIpLCAyMCApXG4gICAgfTtcbiAgICAvLyBVcGRhdGUgdGhlIHN0eWxlXG4gICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgICAvLyBJbml0aWxpemUgdGhlIGFuY2hvciBwb2ludHMgb25jZSB0aGUgZWxlbWVudHMgYXJlIGNyZWF0ZWRcbiAgICBpZiAoY3kuZWRnZUVkaXRpbmcgJiYgY3kuZWRnZUVkaXRpbmcoJ2luaXRpYWxpemVkJykpIHtcbiAgICAgIGN5LmVkZ2VFZGl0aW5nKCdnZXQnKS5pbml0QW5jaG9yUG9pbnRzKGN5LmVkZ2VzKCkpO1xuICAgIH1cblxuXG5cbiAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCBcInVwZGF0ZUdyYXBoRW5kXCIsIFtjeSwgKGlzTGF5b3V0UmVxdWlyZWQgfHwgdGlsZUluZm9Cb3hlcykgLCBwZXJmb3JtTGF5b3V0XSk7XG4gICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xuICB9O1xuXG4gIGdyYXBoVXRpbGl0aWVzLmNhbGN1bGF0ZVBhZGRpbmdzID0gZnVuY3Rpb24ocGFkZGluZ1BlcmNlbnQpIHtcbiAgICAvL0FzIGRlZmF1bHQgdXNlIHRoZSBjb21wb3VuZCBwYWRkaW5nIHZhbHVlXG4gICAgaWYgKCFwYWRkaW5nUGVyY2VudCkge1xuICAgICAgdmFyIGNvbXBvdW5kUGFkZGluZyA9IG9wdGlvbnMuY29tcG91bmRQYWRkaW5nO1xuICAgICAgcGFkZGluZ1BlcmNlbnQgPSB0eXBlb2YgY29tcG91bmRQYWRkaW5nID09PSAnZnVuY3Rpb24nID8gY29tcG91bmRQYWRkaW5nLmNhbGwoKSA6IGNvbXBvdW5kUGFkZGluZztcbiAgICB9XG5cbiAgICB2YXIgbm9kZXMgPSBjeS5ub2RlcygpO1xuICAgIHZhciB0b3RhbCA9IDA7XG4gICAgdmFyIG51bU9mU2ltcGxlcyA9IDA7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHRoZU5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIGlmICh0aGVOb2RlLmNoaWxkcmVuKCkgPT0gbnVsbCB8fCB0aGVOb2RlLmNoaWxkcmVuKCkubGVuZ3RoID09IDApIHtcbiAgICAgICAgdG90YWwgKz0gTnVtYmVyKHRoZU5vZGUud2lkdGgoKSk7XG4gICAgICAgIHRvdGFsICs9IE51bWJlcih0aGVOb2RlLmhlaWdodCgpKTtcbiAgICAgICAgbnVtT2ZTaW1wbGVzKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNhbGNfcGFkZGluZyA9IChwYWRkaW5nUGVyY2VudCAvIDEwMCkgKiBNYXRoLmZsb29yKHRvdGFsIC8gKDIgKiBudW1PZlNpbXBsZXMpKTtcbiAgICBpZiAoY2FsY19wYWRkaW5nIDwgNSkge1xuICAgICAgY2FsY19wYWRkaW5nID0gNTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY19wYWRkaW5nO1xuICB9O1xuXG4gIGdyYXBoVXRpbGl0aWVzLnJlY2FsY3VsYXRlUGFkZGluZ3MgPSBncmFwaFV0aWxpdGllcy5yZWZyZXNoUGFkZGluZ3MgPSBmdW5jdGlvbigpIHtcbiAgICAvLyB0aGlzLmNhbGN1bGF0ZWRQYWRkaW5ncyBpcyBub3Qgd29ya2luZyBoZXJlXG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHJlZmVyZW5jZSB3aXRoIHRoaXMuY2FsY3VsYXRlZFBhZGRpbmdzIG9uY2UgdGhlIHJlYXNvbiBpcyBmaWd1cmVkIG91dFxuICAgIC8vZ3JhcGhVdGlsaXRpZXMuY2FsY3VsYXRlZFBhZGRpbmdzID0gdGhpcy5jYWxjdWxhdGVQYWRkaW5ncygpO1xuICAgIHZhciBjb21wb3VuZFBhZGRpbmcgPSBvcHRpb25zLmNvbXBvdW5kUGFkZGluZztcbiAgICByZXR1cm4gKCB0eXBlb2YgY29tcG91bmRQYWRkaW5nID09PSAnZnVuY3Rpb24nKSA/IGNvbXBvdW5kUGFkZGluZy5jYWxsKCkgOiBjb21wb3VuZFBhZGRpbmdcbiAgICAvL3JldHVybiBncmFwaFV0aWxpdGllcy5jYWxjdWxhdGVkUGFkZGluZ3M7XG4gIH07XG5cbiAgZ3JhcGhVdGlsaXRpZXMuZ2V0Q29tcG91bmRQYWRkaW5ncyA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIFJldHVybiBjYWxjdWxhdGVkIHBhZGRpbmdzIGluIGNhc2Ugb2YgdGhhdCBkYXRhIGlzIGludmFsaWQgcmV0dXJuIDVcbiAgICB2YXIgY29tcG91bmRQYWRkaW5nID0gb3B0aW9ucy5jb21wb3VuZFBhZGRpbmc7XG4gICAgcmV0dXJuICggdHlwZW9mIGNvbXBvdW5kUGFkZGluZyA9PT0gJ2Z1bmN0aW9uJykgPyBjb21wb3VuZFBhZGRpbmcuY2FsbCgpIDogY29tcG91bmRQYWRkaW5nXG5cbiAgICAvL3JldHVybiBncmFwaFV0aWxpdGllcy5jYWxjdWxhdGVkUGFkZGluZ3MgfHwgNTtcbiAgfTtcblxuICByZXR1cm4gZ3JhcGhVdGlsaXRpZXM7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuXG4gIHZhciBqc29uVG9TYmdubWwsIGVsZW1lbnRVdGlsaXRpZXMsIGN5O1xuXG4gIGZ1bmN0aW9uIGpzb25Ub053dChwYXJhbSkge1xuICAgIGpzb25Ub1NiZ25tbCA9IHBhcmFtLmpzb25Ub1NiZ25tbENvbnZlcnRlcjtcbiAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG4gIH1cblxuICBmdW5jdGlvbiBzZXRUb1N0cihzZXQpIHtcbiAgICBpZiAoc2V0KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0KS5qb2luKCc7Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgc2lmRWRnZVByb3BIYW5kbGVyTWFwID0ge1xuICAgICdwY0lEcyc6IGZ1bmN0aW9uKGVkZ2UpIHtcbiAgICAgIHJldHVybiBzZXRUb1N0ciggZWRnZS5kYXRhKCdwY0lEU2V0JykgKTtcbiAgICB9LFxuICAgICdzaXRlTG9jYXRpb25zJzogZnVuY3Rpb24oZWRnZSkge1xuICAgICAgcmV0dXJuIHNldFRvU3RyKCBlZGdlLmRhdGEoJ3NpdGVMb2NTZXQnKSApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgc2lmTm9kZVByb3BIYW5kbGVyTWFwID0ge1xuICAgICd0b29sdGlwJzogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuZGF0YSgndG9vbHRpcCcpO1xuICAgIH0sXG4gICAgJ2luZm9ib3hlcyc6IGZ1bmN0aW9uKG5vZGUsIG9iaikge1xuICAgICAgdmFyIHNpZkluZm9ib3hQcm9wSGFuZGxlck1hcCA9IHtcbiAgICAgICAgJ3Rvb2x0aXAnOiBmdW5jdGlvbihpbmZvYm94KSB7XG4gICAgICAgICAgcmV0dXJuIGluZm9ib3gudG9vbHRpcDtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdmFyIGluZm9ib3hlcyA9IG5vZGUuZGF0YSgnc3RhdGVzYW5kaW5mb3MnKTtcbiAgICAgIHZhciBnbHlwaHMgPSBvYmouZ2x5cGg7XG4gICAgICBpbmZvYm94ZXMuZm9yRWFjaCggZnVuY3Rpb24oaW5mb2JveCwgaSkge1xuICAgICAgICBPYmplY3Qua2V5cyhzaWZJbmZvYm94UHJvcEhhbmRsZXJNYXApLmZvckVhY2goIGZ1bmN0aW9uKHByb3BOYW1lKSB7XG4gICAgICAgICAgdmFyIHZhbCA9IHNpZkluZm9ib3hQcm9wSGFuZGxlck1hcFtwcm9wTmFtZV0oaW5mb2JveCk7XG4gICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgZ2x5cGhzW2ldW3Byb3BOYW1lXSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgIH0gKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gb2JqZWN0cyBjb25zaXN0IG9mIGFyY3Mgb3IgZ3lscGhzXG4gIGZ1bmN0aW9uIGV4dGVuZE9iamVjdHNEYXRhKG9ianMsIGZpbHRlckZjbiwgcHJvcEhhbmRsZXJNYXApIHtcbiAgICBpZiAoICFvYmpzICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9ianMuZm9yRWFjaCggZnVuY3Rpb24oIG9iaiApIHtcbiAgICAgIGlmICggZmlsdGVyRmNuKCBvYmouJC5jbGFzcyApICkge1xuICAgICAgICB2YXIgZWxlID0gY3kuZ2V0RWxlbWVudEJ5SWQoIG9iai4kLmlkICk7XG4gICAgICAgIE9iamVjdC5rZXlzKCBwcm9wSGFuZGxlck1hcCApLmZvckVhY2goIGZ1bmN0aW9uKCBwcm9wTmFtZSApIHtcbiAgICAgICAgICAvLyBkb2VzIG5vdCBoYXZlIHRvIHJldHVybiBhIHZhbHVlLCBtYXliZSBhIHZvaWQgZnVuY3Rpb24gYXMgd2VsbFxuICAgICAgICAgIHZhciB2YWwgPSBwcm9wSGFuZGxlck1hcFsgcHJvcE5hbWUgXSggZWxlLCBvYmogKTtcbiAgICAgICAgICBpZiAoIHZhbCApIHtcbiAgICAgICAgICAgIG9ialsgcHJvcE5hbWUgXSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgIH1cbiAgICB9ICk7XG4gIH1cblxuICBmdW5jdGlvbiBleHRlbmRTdHlsZXNEYXRhKHRvRXh0ZW5kLCBleHRlbmRGcm9tKSB7XG4gICAgaWYgKCAhdG9FeHRlbmQgfHwgIWV4dGVuZEZyb20gKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlTmFtZXMgPSBbICdzaGFwZU5hbWUnIF07XG4gICAgdmFyIHN0eWxlTWFwID0ge307XG5cbiAgICBPYmplY3Qua2V5cyggZXh0ZW5kRnJvbSApLmZvckVhY2goIGZ1bmN0aW9uKCBrZXkgKSB7XG4gICAgICBzdHlsZU5hbWVzLmZvckVhY2goIGZ1bmN0aW9uKCBuYW1lICkge1xuICAgICAgICB2YXIgZWwgPSBleHRlbmRGcm9tWyBrZXkgXTtcbiAgICAgICAgdmFyIHByb3BzID0gZWwgJiYgZWwucHJvcGVydGllcztcblxuICAgICAgICBpZiAoIHByb3BzICYmIHByb3BzWyBuYW1lIF0gKSB7XG4gICAgICAgICAgdmFyIHZhbCA9IHByb3BzWyBuYW1lIF07XG4gICAgICAgICAgdmFyIGlkTGlzdCA9IGVsLmlkTGlzdDtcblxuICAgICAgICAgIGlkTGlzdC5mb3JFYWNoKCBmdW5jdGlvbiggaWQgKSB7XG4gICAgICAgICAgICBzdHlsZU1hcFsgaWQgXSA9IHN0eWxlTWFwWyBpZCBdIHx8IHt9O1xuICAgICAgICAgICAgc3R5bGVNYXBbIGlkIF1bIG5hbWUgXSA9IHZhbDtcbiAgICAgICAgICB9ICk7XG4gICAgICAgIH1cbiAgICAgIH0gKTtcbiAgICB9ICk7XG5cbiAgICB0b0V4dGVuZC5mb3JFYWNoKCBmdW5jdGlvbiggc3R5bGUgKSB7XG4gICAgICB2YXIgaWRMaXN0ID0gc3R5bGUuJC5pZExpc3Quc3BsaXQoJyAnKTtcblxuICAgICAgc3R5bGVOYW1lcy5mb3JFYWNoKCBmdW5jdGlvbiggbmFtZSApIHtcbiAgICAgICAgdmFyIHZhbCA9IG51bGw7XG5cbiAgICAgICAgaWRMaXN0LmZvckVhY2goIGZ1bmN0aW9uKCBpZCApIHtcbiAgICAgICAgICB2YXIgY3VyclZhbCA9IHN0eWxlTWFwWyBpZCBdICYmIHN0eWxlTWFwWyBpZCBdWyBuYW1lIF07XG4gICAgICAgICAgaWYgKCBjdXJyVmFsID09PSB1bmRlZmluZWQgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCB2YWwgPT0gbnVsbCApIHtcbiAgICAgICAgICAgIHZhbCA9IGN1cnJWYWw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKCB2YWwgIT09IGN1cnJWYWwgKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oICdTaGFwZSBuYW1lIG9mIHNvbWUgZ2x5cGhzIGRlZmluZWQgbXVsdGlwbGUgdGltZXMgaW4gcmVuZGVyIGluZm9ybWF0aW9uIScgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gKTtcblxuICAgICAgICBpZiAoIHZhbCAhPT0gbnVsbCApIHtcbiAgICAgICAgICBzdHlsZS5nLiRbIG5hbWUgXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSApO1xuICAgIH0gKTtcbiAgfVxuXG4gIGpzb25Ub053dC5idWlsZEpzT2JqID0gZnVuY3Rpb24oZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcykge1xuICAgIHZhciBqc09iaiA9IGpzb25Ub1NiZ25tbC5idWlsZEpzT2JqKGZpbGVuYW1lLCB2ZXJzaW9uLCByZW5kZXJJbmZvLCBtYXBQcm9wZXJ0aWVzLCBub2RlcywgZWRnZXMpO1xuXG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgIT09ICdQRCcgJiYgZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlICE9PSAnQUYnICAmJiBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgIT09ICdIeWJyaWRTYmduJykge1xuICAgICAgdmFyIG1hcCA9IGpzT2JqLm1hcFswXTtcblxuICAgICAgdmFyIGFyY3MgPSBtYXAuYXJjO1xuICAgICAgdmFyIGdseXBocyA9IG1hcC5nbHlwaDtcbiAgICAgIGV4dGVuZE9iamVjdHNEYXRhKGFyY3MsIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZFZGdlLCBzaWZFZGdlUHJvcEhhbmRsZXJNYXApO1xuICAgICAgZXh0ZW5kT2JqZWN0c0RhdGEoZ2x5cGhzLCBlbGVtZW50VXRpbGl0aWVzLmlzU0lGTm9kZSwgc2lmTm9kZVByb3BIYW5kbGVyTWFwKTtcblxuICAgICAgdmFyIGpzT2JqU3R5bGVzID0gKCBtYXAgJiYgbWFwLmV4dGVuc2lvbiAmJiBtYXAuZXh0ZW5zaW9uLnJlbmRlckluZm9ybWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbWFwLmV4dGVuc2lvbi5yZW5kZXJJbmZvcm1hdGlvbi5saXN0T2ZTdHlsZXMgKS5zdHlsZTtcbiAgICAgIHZhciBhcHBTdHlsZXMgPSByZW5kZXJJbmZvICYmIHJlbmRlckluZm8uc3R5bGVzO1xuXG4gICAgICBleHRlbmRTdHlsZXNEYXRhKGpzT2JqU3R5bGVzLCBhcHBTdHlsZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBqc09iajtcbiAgfTtcblxuICBqc29uVG9Od3QuY3JlYXRlTnd0ID0gZnVuY3Rpb24oZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcykge1xuICAgIHZhciBqc09iaiA9IGpzb25Ub053dC5idWlsZEpzT2JqKGZpbGVuYW1lLCB2ZXJzaW9uLCByZW5kZXJJbmZvLCBtYXBQcm9wZXJ0aWVzLCBub2RlcywgZWRnZXMpO1xuICAgIHJldHVybiBqc29uVG9TYmdubWwuYnVpbGRTdHJpbmcoe3NiZ246IGpzT2JqfSk7XG4gIH07XG5cbiAgcmV0dXJuIGpzb25Ub053dDtcbn1cbiIsIlxudmFyIGxpYnNiZ25qcyA9IHJlcXVpcmUoJ2xpYnNiZ24uanMnKTtcbnZhciByZW5kZXJFeHRlbnNpb24gPSBsaWJzYmduanMucmVuZGVyO1xudmFyIGFubm90ID0gbGlic2JnbmpzLmFubm90O1xudmFyIHBrZ1ZlcnNpb24gPSByZXF1aXJlKCcuLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uOyAvLyBuZWVkIGluZm8gYWJvdXQgc2JnbnZpeiB0byBwdXQgaW4geG1sXG52YXIgcGtnTmFtZSA9IHJlcXVpcmUoJy4uLy4uL3BhY2thZ2UuanNvbicpLm5hbWU7XG52YXIgcHJldHR5cHJpbnQgPSByZXF1aXJlKCdwcmV0dHktZGF0YScpLnBkO1xudmFyIHhtbDJqcyA9IHJlcXVpcmUoJ3htbDJqcycpO1xudmFyIG1hcFByb3BlcnRpZXNCdWlsZGVyID0gbmV3IHhtbDJqcy5CdWlsZGVyKHtyb290TmFtZTogXCJtYXBQcm9wZXJ0aWVzXCJ9KTtcbnZhciBjb21wb3VuZEV4dGVuc2lvbkJ1aWxkZXIgPSBuZXcgeG1sMmpzLkJ1aWxkZXIoe3Jvb3ROYW1lOiBcImV4dHJhSW5mb1wifSk7XG52YXIgdGV4dFV0aWxpdGllcyA9IHJlcXVpcmUoJy4vdGV4dC11dGlsaXRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBlbGVtZW50VXRpbGl0aWVzLCBncmFwaFV0aWxpdGllcywgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXk7XG4gIHZhciBjeTtcblxuICAvKlxuICAgICAgdGFrZXMgcmVuZGVySW5mbyBhcyBhbiBvcHRpb25hbCBhcmd1bWVudC4gSXQgY29udGFpbnMgYWxsIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gc2F2ZVxuICAgICAgdGhlIHN0eWxlIGFuZCBjb2xvcnMgdG8gdGhlIHJlbmRlciBleHRlbnNpb24uIFNlZSBuZXd0L2FwcC11dGlsaXRpZXMgZ2V0QWxsU3R5bGVzKClcbiAgICAgIFN0cnVjdHVyZToge1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRoZSBtYXAgYmFja2dyb3VuZCBjb2xvcixcbiAgICAgICAgICBjb2xvcnM6IHtcbiAgICAgICAgICAgIHZhbGlkWG1sVmFsdWU6IGNvbG9yX2lkXG4gICAgICAgICAgICAuLi5cbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICBzdHlsZUtleTE6IHtcbiAgICAgICAgICAgICAgICAgIGlkTGlzdDogbGlzdCBvZiB0aGUgbm9kZXMgaWRzIHRoYXQgaGF2ZSB0aGlzIHN0eWxlXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IC4uLlxuICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IC4uLlxuICAgICAgICAgICAgICAgICAgICAgIC4uLlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0eWxlS2V5MjogLi4uXG4gICAgICAgICAgICAgIC4uLlxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgKi9cbiAgZnVuY3Rpb24ganNvblRvU2Jnbm1sIChwYXJhbSkge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICAgIGdyYXBoVXRpbGl0aWVzID0gcGFyYW0uZ3JhcGhVdGlsaXRpZXM7XG4gICAgZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkgPSBwYXJhbS5leHBlcmltZW50YWxEYXRhT3ZlcmxheTtcbiAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG4gIH1cblxuICAvKlxuICAgdmVyc2lvbiBpcyBlaXRoZXIgMC4yIG9yIDAuMyBvciBwbGFpbiwgMC4zIHVzZWQgYXMgZGVmYXVsdCBpZiBub25lIHByb3ZpZGVkLlxuICAgT25seSBkaWZmZXJlbmNlIHJpZ2h0IG5vdyBpcyB0aGF0IDxtYXA+IGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGlkIGF0dHJpYnV0ZSBpbiAwLjIsIGFuZCBoYXMgb24gaW4gMC4zLlxuICAgU2VyaW91cyBjaGFuZ2VzIG9jY3VyIGJldHdlZW4gdGhlIGZvcm1hdCB2ZXJzaW9uIGZvciBzdWJtYXBzIGNvbnRlbnQuIFRob3NlIGNoYW5nZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXG4gICBUT0RPIGltcGxlbWVudCAwLjMgY2hhbmdlcyB3aGVuIHN1Ym1hcCBzdXBwb3J0IGlzIGZ1bGx5IHRoZXJlLlxuICAgKi9cbiAganNvblRvU2Jnbm1sLmJ1aWxkSnNPYmogPSBmdW5jdGlvbihmaWxlbmFtZSwgdmVyc2lvbiwgcmVuZGVySW5mbywgbWFwUHJvcGVydGllcywgbm9kZXMsIGVkZ2VzKXtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIG1hcElEID0gdGV4dFV0aWxpdGllcy5nZXRYTUxWYWxpZElkKGZpbGVuYW1lKTtcbiAgICB2YXIgaGFzRXh0ZW5zaW9uID0gZmFsc2U7XG4gICAgdmFyIGhhc1JlbmRlckV4dGVuc2lvbiA9IGZhbHNlO1xuICAgIHZhciBtYXBUeXBlID0gKCBtYXBQcm9wZXJ0aWVzICYmIG1hcFByb3BlcnRpZXMubWFwVHlwZSApIHx8IGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZTtcbiAgICB0aGlzLm5vZGVzID0gbm9kZXMgfHwgY3kubm9kZXMoKTtcbiAgICB0aGlzLmVkZ2VzID0gZWRnZXMgfHwgY3kuZWRnZXMoKTtcblxuICAgIHZhciBjb2xsYXBzZWRDaGlsZHJlbiA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0QWxsQ29sbGFwc2VkQ2hpbGRyZW5SZWN1cnNpdmVseSh0aGlzLm5vZGVzKTtcbiAgICB0aGlzLmFsbENvbGxhcHNlZE5vZGVzID0gY29sbGFwc2VkQ2hpbGRyZW4uZmlsdGVyKFwibm9kZVwiKTtcbiAgICB0aGlzLmFsbENvbGxhcHNlZEVkZ2VzID0gY29sbGFwc2VkQ2hpbGRyZW4uZmlsdGVyKFwiZWRnZVwiKTtcblxuICAgIGlmICh0eXBlb2YgcmVuZGVySW5mbyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICBoYXNFeHRlbnNpb24gPSB0cnVlO1xuICAgICAgIGhhc1JlbmRlckV4dGVuc2lvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYodHlwZW9mIHZlcnNpb24gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBkZWZhdWx0IGlmIG5vdCBzcGVjaWZpZWRcbiAgICAgIHZlcnNpb24gPSBcIjAuM1wiO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIHZlcnNpb24gdmFsaWRpdHlcbiAgICBpZih2ZXJzaW9uICE9PSBcIjAuMlwiICYmIHZlcnNpb24gIT09IFwiMC4zXCIgJiYgdmVyc2lvbiAhPT0gXCJwbGFpblwiICYmIHZlcnNpb24gIT09IFwicGxhaW4zXCIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIFNCR04tTUwgdmVyc2lvbiBwcm92aWRlZC4gRXhwZWN0ZWQgMC4yLCAwLjMsIHBsYWluIG9yIHBsYWluMywgZ290OiBcIiArIHZlcnNpb24pO1xuICAgICAgcmV0dXJuIFwiRXJyb3JcIjtcbiAgICB9XG5cbiAgICB2YXIgbWFwTGFuZ3VhZ2UgPSBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGVUb0xhbmd1YWdlKG1hcFR5cGUpO1xuXG4gICAgLy9hZGQgaGVhZGVyc1xuICAgIHhtbEhlYWRlciA9IFwiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J3llcyc/PlxcblwiOyAgXG4gICAgdmFyIHZlcnNpb25ObztcbiAgICBpZih2ZXJzaW9uID09PSBcInBsYWluXCIpe1xuICAgICAgdmVyc2lvbk5vID0gXCIwLjJcIjtcbiAgICB9ZWxzZSBpZih2ZXJzaW9uID09PSBcInBsYWluM1wiKXtcbiAgICAgIHZlcnNpb25ObyA9IFwiMC4zXCI7XG4gICAgfWVsc2V7XG4gICAgICB2ZXJzaW9uTm8gPSB2ZXJzaW9uO1xuICAgIH1cbiAgICAvL3ZhciB2ZXJzaW9uTm8gPSAodmVyc2lvbiA9PT0gXCJwbGFpblwiKSA/IFwiMC4yXCIgOiB2ZXJzaW9uO1xuICAgIHZhciBzYmduID0gbmV3IGxpYnNiZ25qcy5TYmduKHt4bWxuczogJ2h0dHA6Ly9zYmduLm9yZy9saWJzYmduLycgKyB2ZXJzaW9uTm99KTtcblxuICAgIHZhciBtYXA7XG4gICAgaWYodmVyc2lvbiA9PT0gXCIwLjNcIiB8fCB2ZXJzaW9uID09PVwicGxhaW4zXCIpIHtcbiAgICAgIHZhciBtYXAgPSBuZXcgbGlic2JnbmpzLk1hcCh7bGFuZ3VhZ2U6IG1hcExhbmd1YWdlLCBpZDogbWFwSUR9KTtcbiAgICB9XG4gICAgZWxzZSBpZih2ZXJzaW9uID09PSBcIjAuMlwiIHx8IHZlcnNpb24gPT09IFwicGxhaW5cIikge1xuICAgICAgdmFyIG1hcCA9IG5ldyBsaWJzYmduanMuTWFwKHtsYW5ndWFnZTogbWFwTGFuZ3VhZ2V9KTtcbiAgICB9XG5cbiAgICBpZiAoaGFzRXh0ZW5zaW9uKSB7IC8vIGV4dGVuc2lvbiBpcyB0aGVyZVxuICAgICAgIHZhciBleHRlbnNpb24gPSBuZXcgbGlic2JnbmpzLkV4dGVuc2lvbigpO1xuICAgICAgIGlmIChoYXNSZW5kZXJFeHRlbnNpb24pIHtcbiAgICAgICAgICAgZXh0ZW5zaW9uLmFkZChzZWxmLmdldFJlbmRlckV4dGVuc2lvblNiZ25tbChyZW5kZXJJbmZvKSk7XG4gICAgICAgfVxuICAgICAgIG1hcC5zZXRFeHRlbnNpb24oZXh0ZW5zaW9uKTtcbiAgICAgICBpZiAobWFwUHJvcGVydGllcykge1xuICAgICAgICAgICBkZWxldGUgbWFwUHJvcGVydGllcy5leHBlcmltZW50RGVzY3JpcHRpb247XG4gICAgICAgICAgIHZhciB4bWwgPSBtYXBQcm9wZXJ0aWVzQnVpbGRlci5idWlsZE9iamVjdChtYXBQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgbWFwLmV4dGVuc2lvbi5hZGQoeG1sKTtcbiAgICAgICB9XG5cbiAgICB9IGVsc2UgaWYgKG1hcFByb3BlcnRpZXMpIHtcbiAgICAgICBtYXAuc2V0RXh0ZW5zaW9uKG5ldyBsaWJzYmduanMuRXh0ZW5zaW9uKCkpO1xuICAgICAgIG1hcC5leHRlbnNpb24uYWRkKG1hcFByb3BlcnRpZXNCdWlsZGVyLmJ1aWxkT2JqZWN0KG1hcFByb3BlcnRpZXMpKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgYWxsIGdseXBoc1xuICAgIHZhciBnbHlwaExpc3QgPSBbXTtcbiAgICAvLyBiZSBjYXJlZnVsIHRoYXQgOnZpc2libGUgaXMgYWxzbyB1c2VkIGR1cmluZyByZWN1cnNpdmUgc2VhcmNoIG9mIG5vZGVzXG4gICAgLy8gaW4gdGhlIGdldEdseXBoU2Jnbm1sIGZ1bmN0aW9uLiBJZiBub3Qgc2V0IGFjY29yZGluZ2x5LCBkaXNjcmVwYW5jaWVzIHdpbGwgb2NjdXIuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHRoaXMubm9kZXMuZWFjaChmdW5jdGlvbihlbGUsIGkpe1xuICAgICAgIGlmKHR5cGVvZiBlbGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgfVxuICAgICAgIGlmKGpzb25Ub1NiZ25tbC5jaGlsZE9mTm9uZShlbGUsIHNlbGYubm9kZXMpKVxuICAgICAgICAgICBnbHlwaExpc3QgPSBnbHlwaExpc3QuY29uY2F0KHNlbGYuZ2V0R2x5cGhTYmdubWwoZWxlLCB2ZXJzaW9uKSk7IC8vIHJldHVybnMgcG90ZW50aWFsbHkgbW9yZSB0aGFuIDEgZ2x5cGhcbiAgICB9KTtcbiAgICAvLyBhZGQgdGhlbSB0byB0aGUgbWFwXG4gICAgZm9yKHZhciBpPTA7IGk8Z2x5cGhMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgaWYgKHZlcnNpb24gPT09IFwicGxhaW5cIilcbiAgICAgICAgIGdseXBoTGlzdFtpXS5leHRlbnNpb24gPSBudWxsO1xuICAgICAgIG1hcC5hZGRHbHlwaChnbHlwaExpc3RbaV0pO1xuICAgIH1cbiAgICAvLyBnZXQgYWxsIGFyY3NcbiAgICB2YXIgZWRnZXMgPSB0aGlzLmFsbENvbGxhcHNlZEVkZ2VzLnVuaW9uKHRoaXMuZWRnZXMpO1xuICAgIGVkZ2VzLmVhY2goZnVuY3Rpb24oZWxlLCBpKXtcbiAgICAgICBpZih0eXBlb2YgZWxlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICBlbGUgPSBpO1xuICAgICAgIH1cbiAgICAgICB2YXIgYXJjID0gc2VsZi5nZXRBcmNTYmdubWwoZWxlLCB2ZXJzaW9uKTtcbiAgICAgICBpZiAodmVyc2lvbiA9PT0gXCJwbGFpblwiKVxuICAgICAgICAgYXJjLmV4dGVuc2lvbiA9IG51bGw7XG4gICAgICAgbWFwLmFkZEFyYyhhcmMpO1xuICAgIH0pO1xuXG4gICAgc2Jnbi5hZGRNYXAobWFwKTtcblxuICAgIHJldHVybiBzYmduLmJ1aWxkSnNPYmooKTtcbiAgfTtcblxuICBqc29uVG9TYmdubWwuY3JlYXRlU2Jnbm1sID0gZnVuY3Rpb24oZmlsZW5hbWUsIHZlcnNpb24sIHJlbmRlckluZm8sIG1hcFByb3BlcnRpZXMsIG5vZGVzLCBlZGdlcykge1xuICAgIHZhciBqc09iaiA9IGpzb25Ub1NiZ25tbC5idWlsZEpzT2JqKGZpbGVuYW1lLCB2ZXJzaW9uLCByZW5kZXJJbmZvLCBtYXBQcm9wZXJ0aWVzLCBub2RlcywgZWRnZXMpO1xuICAgIHJldHVybiBqc29uVG9TYmdubWwuYnVpbGRTdHJpbmcoe3NiZ246IGpzT2JqfSk7XG4gIH1cblxuICAvLyBDb3BpZXMgYW5kIGV4dGVuZHMgYnVpbGRTdHJpbmcoKSBvZiBodHRwczovL2dpdGh1Yi5jb20vc2Jnbi9saWJzYmduLmpzL2Jsb2IvbWFzdGVyL3NyYy91dGlsaXRpZXMuanNcbiAganNvblRvU2Jnbm1sLmJ1aWxkU3RyaW5nID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgdmFyIHhtbFN0cmluZyA9ICBuZXcgeG1sMmpzLkJ1aWxkZXIoe1xuICBcdFx0aGVhZGxlc3M6IHRydWUsXG4gIFx0XHRyZW5kZXJPcHRzOiB7cHJldHR5OiBmYWxzZX1cbiAgXHR9KS5idWlsZE9iamVjdChvYmopO1xuXG4gICAgLy8gY2hhbmdlIG5hbWluZyBjb252ZW50aW9uIGZyb20gQ2FtZWwgQ2FzZSAodmFyaWFibGVOYW1lKSB0byBLZWJhYiBjYXNlICh2YXJpYWJsZS1uYW1lKVxuICAgIHZhciBtYXRjaFJlc3VsdCA9IHhtbFN0cmluZy5tYXRjaChcIjxyZW5kZXJJbmZvcm1hdGlvblteXSo8L3JlbmRlckluZm9ybWF0aW9uPlwiKTtcbiAgICBpZihtYXRjaFJlc3VsdCAhPSBudWxsKXtcbiAgICAgIHZhciBpbWFnZXNFbGVtZW50TWF0Y2ggPSB4bWxTdHJpbmcubWF0Y2goXCI8bGlzdE9mQmFja2dyb3VuZEltYWdlc1teXSo8L2xpc3RPZkJhY2tncm91bmRJbWFnZXM+XCIpO1xuICAgICAgdmFyIGltYWdlc0VsZW1lbnQ7XG4gICAgICBpZihpbWFnZXNFbGVtZW50TWF0Y2ggIT0gbnVsbCl7XG4gICAgICAgIGltYWdlc0VsZW1lbnQgPSBpbWFnZXNFbGVtZW50TWF0Y2hbMF07XG4gICAgICB9XG4gICAgICB2YXIgcmVuZGVySW5mb1N0cmluZyA9IG1hdGNoUmVzdWx0WzBdO1xuICAgICAgdmFyIHJlbmRlckluZm9TdHJpbmdDb3B5ID0gKCcgJyArIHJlbmRlckluZm9TdHJpbmcpLnNsaWNlKDEpO1xuICAgICAgY29uc3QgcmVnZXggPSAvXFxzKFtcXFNdKykoW1xcc10qKT0vZztcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB2YXIgbWF0Y2hlcyA9IFtdO1xuICAgICAgd2hpbGUocmVzdWx0ID0gcmVnZXguZXhlYyhyZW5kZXJJbmZvU3RyaW5nKSkge1xuICAgICAgICBtYXRjaGVzLnB1c2gocmVzdWx0WzBdKTtcbiAgICAgIH07XG4gICAgICBtYXRjaGVzLmZvckVhY2goZnVuY3Rpb24obWF0Y2gpe1xuXG4gICAgICAgIGlmKG1hdGNoICE9IFwiIGlkTGlzdD1cIilcbiAgICAgICAgICByZW5kZXJJbmZvU3RyaW5nID0gcmVuZGVySW5mb1N0cmluZy5yZXBsYWNlKG1hdGNoICwgdGV4dFV0aWxpdGllcy5Gcm9tQ2FtZWxUb0tlYmFiQ2FzZShtYXRjaCkpO1xuICAgICAgfSk7XG5cbiAgICAgIHhtbFN0cmluZyA9IHhtbFN0cmluZy5yZXBsYWNlKHJlbmRlckluZm9TdHJpbmdDb3B5LCByZW5kZXJJbmZvU3RyaW5nKTtcbiAgICAgIHZhciBpbWFnZXNFbGVtZW50TWF0Y2hEaXJ0eSA9IHhtbFN0cmluZy5tYXRjaChcIjxsaXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzW15dKjwvbGlzdE9mQmFja2dyb3VuZEltYWdlcz5cIik7XG4gICAgICBpZihpbWFnZXNFbGVtZW50TWF0Y2hEaXJ0eSAhPSBudWxsKXtcbiAgICAgICAgeG1sU3RyaW5nID0geG1sU3RyaW5nLnJlcGxhY2UoaW1hZ2VzRWxlbWVudE1hdGNoRGlydHlbMF0saW1hZ2VzRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gIFx0LyogXHRkaXJ0eSBoYWNrIG5lZWRlZCB0byBzb2x2ZSB0aGUgbmV3bGluZSBjaGFyIGVuY29kaW5nIHByb2JsZW1cbiAgXHRcdHhtbDJqcyBkb2Vzbid0IGVuY29kZSBcXG4gYXMgJiN4QTsgd2UgbmVlZCB0byBkbyBpdCBtYW51YWxseVxuICBcdCovXG4gIFx0dmFyIHJlID0gLzxsYWJlbCB0ZXh0PVwiKCgufFxcbispKz8pXCIvZ207XG4gIFx0dmFyIHhtbFN0cmluZ19jb3JyZWN0TGFiZWwgPSB4bWxTdHJpbmcucmVwbGFjZShyZSwgZnVuY3Rpb24obWF0Y2gsIHAxLCBwMikge1xuICBcdFx0cmV0dXJuICc8bGFiZWwgdGV4dD1cIicrcDEucmVwbGFjZSgvXFxuL2csIFwiJiN4QTtcIikrJ1wiJztcbiAgXHR9KTtcblxuICAgIHZhciB4bWxIZWFkZXIgPSBcIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04JyBzdGFuZGFsb25lPSd5ZXMnPz5cXG5cIjtcbiAgICAvKlxuICAgICAgcHJldHR5cHJpbnQgcHV0cyBhIGxpbmUgYnJlYWsgaW5zaWRlIHRoZSByb290IDxzYmduPiB0YWcgYmVmb3JlIHRoZSB4bWxucyBhdHRyaWJ1dGUuXG4gICAgICBUaGlzIGlzIHBlcmZlY2x5IHZhbGlkLCBidXQgVmFudGVkIGRvZXNuJ3QgbGlrZSBpdCBhbmQgY2Fubm90IGxvYWQgdGhvc2UgZmlsZXMgYXMgaXMuXG4gICAgICBUaGlzIGxpbmUgYnJlYWsgaXMgcmVtb3ZlZCBoZXJlIHRvIG1ha2UgTmV3dCBvdXRwdXQgZGlyZWN0bHkgY29tcGF0aWJsZSB3aXRoIFZhbnRlZC4gVGhpcyBpc3N1ZSB3aWxsIGJlIHJlcG9ydGVkXG4gICAgICB0byB0aGUgVmFudGVkIGd1eXMgYW5kIGhvcGVmdWxseSBmaXhlZCBhdCBzb21lIHBvaW50LiBBZnRlciB0aGF0IHRoZSBmb2xsb3dpbmcgd29ya2Fyb3VuZCBjYW4gYmUgcmVtb3ZlZC5cbiAgICAqL1xuICAgIHZhciB4bWxib2R5ID0gcHJldHR5cHJpbnQueG1sKHhtbFN0cmluZ19jb3JyZWN0TGFiZWwpLnJlcGxhY2UoXCI8c2JnbiBcXG4gIHhtbG5zPVxcXCJodHRwOi8vc2Jnbi5vcmcvbGlic2JnblwiLCBcIjxzYmduIHhtbG5zPVxcXCJodHRwOi8vc2Jnbi5vcmcvbGlic2JnblwiKTtcblxuICAgIHJldHVybiB4bWxIZWFkZXIgKyB4bWxib2R5O1xuICB9XG5cbiAgLy8gc2VlIGNyZWF0ZVNiZ25tbCBmb3IgaW5mbyBvbiB0aGUgc3RydWN0dXJlIG9mIHJlbmRlckluZm9cbiAganNvblRvU2Jnbm1sLmdldFJlbmRlckV4dGVuc2lvblNiZ25tbCA9IGZ1bmN0aW9uKHJlbmRlckluZm8pIHtcbiAgICAgIC8vIGluaXRpYWxpemUgdGhlIG1haW4gY29udGFpbmVyXG4gICAgICB2YXIgcmVuZGVySW5mb3JtYXRpb24gPSBuZXcgcmVuZGVyRXh0ZW5zaW9uLlJlbmRlckluZm9ybWF0aW9uKHsgaWQ6ICdyZW5kZXJJbmZvcm1hdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiByZW5kZXJJbmZvLmJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbU5hbWU6IHBrZ05hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbVZlcnNpb246IHBrZ1ZlcnNpb24gfSk7XG5cbiAgICAgIC8vIHBvcHVsYXRlIGxpc3Qgb2YgY29sb3JzXG4gICAgICB2YXIgbGlzdE9mQ29sb3JEZWZpbml0aW9ucyA9IG5ldyByZW5kZXJFeHRlbnNpb24uTGlzdE9mQ29sb3JEZWZpbml0aW9ucygpO1xuICAgICAgZm9yICh2YXIgY29sb3IgaW4gcmVuZGVySW5mby5jb2xvcnMpIHtcbiAgICAgICAgICB2YXIgY29sb3JEZWZpbml0aW9uID0gbmV3IHJlbmRlckV4dGVuc2lvbi5Db2xvckRlZmluaXRpb24oe2lkOiByZW5kZXJJbmZvLmNvbG9yc1tjb2xvcl0sIHZhbHVlOiBjb2xvcn0pO1xuICAgICAgICAgIGxpc3RPZkNvbG9yRGVmaW5pdGlvbnMuYWRkQ29sb3JEZWZpbml0aW9uKGNvbG9yRGVmaW5pdGlvbik7XG4gICAgICB9XG4gICAgICByZW5kZXJJbmZvcm1hdGlvbi5zZXRMaXN0T2ZDb2xvckRlZmluaXRpb25zKGxpc3RPZkNvbG9yRGVmaW5pdGlvbnMpO1xuICAgICAgXG4gICAgICAgIC8vIHBvcHVsYXRlIGxpc3Qgb2YgYmFja2dyb3VuZCBpbWFnZXNcbiAgICAgICAgdmFyIGxpc3RPZkJhY2tncm91bmRJbWFnZXMgPSBuZXcgcmVuZGVyRXh0ZW5zaW9uLkxpc3RPZkJhY2tncm91bmRJbWFnZXMoKTtcbiAgICAgICAgaWYoIShPYmplY3Qua2V5cyhleHBlcmltZW50YWxEYXRhT3ZlcmxheS5nZXRQYXJzZWREYXRhTWFwKCkpLmxlbmd0aCA+IDApKXtcbiAgICAgICAgICBmb3IgKHZhciBpbWcgaW4gcmVuZGVySW5mby5pbWFnZXMpIHtcbiAgICAgICAgICAgICAgdmFyIGJhY2tncm91bmRJbWFnZSA9IG5ldyByZW5kZXJFeHRlbnNpb24uQmFja2dyb3VuZEltYWdlKHtpZDogcmVuZGVySW5mby5pbWFnZXNbaW1nXSwgdmFsdWU6IGltZ30pO1xuICAgICAgICAgICAgICBsaXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzLmFkZEJhY2tncm91bmRJbWFnZShiYWNrZ3JvdW5kSW1hZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZW5kZXJJbmZvcm1hdGlvbi5zZXRMaXN0T2ZCYWNrZ3JvdW5kSW1hZ2VzKGxpc3RPZkJhY2tncm91bmRJbWFnZXMpO1xuXG4gICAgICAvLyBwb3B1bGF0ZXMgc3R5bGVzXG4gICAgICB2YXIgbGlzdE9mU3R5bGVzID0gbmV3IHJlbmRlckV4dGVuc2lvbi5MaXN0T2ZTdHlsZXMoKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiByZW5kZXJJbmZvLnN0eWxlcykge1xuICAgICAgICAgIHZhciBzdHlsZSA9IHJlbmRlckluZm8uc3R5bGVzW2tleV07XG4gICAgICAgICAgdmFyIHhtbFN0eWxlID0gbmV3IHJlbmRlckV4dGVuc2lvbi5TdHlsZSh7aWQ6IHRleHRVdGlsaXRpZXMuZ2V0WE1MVmFsaWRJZChrZXkpLCBpZExpc3Q6IHN0eWxlLmlkTGlzdC5qb2luKCcgJyl9KTtcbiAgICAgICAgICB2YXIgZyA9IG5ldyByZW5kZXJFeHRlbnNpb24uUmVuZGVyR3JvdXAoe1xuICAgICAgICAgICAgICBmb250U2l6ZTogc3R5bGUucHJvcGVydGllcy5mb250U2l6ZSxcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogc3R5bGUucHJvcGVydGllcy5mb250RmFtaWx5LFxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBzdHlsZS5wcm9wZXJ0aWVzLmZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgIGZvbnRTdHlsZTogc3R5bGUucHJvcGVydGllcy5mb250U3R5bGUsXG4gICAgICAgICAgICAgIGZvbnRDb2xvcjogc3R5bGUucHJvcGVydGllcy5mb250Q29sb3IsXG4gICAgICAgICAgICAgIGZpbGw6IHN0eWxlLnByb3BlcnRpZXMuZmlsbCwgLy8gZmlsbCBjb2xvclxuICAgICAgICAgICAgICBzdHJva2U6IHN0eWxlLnByb3BlcnRpZXMuc3Ryb2tlLCAvLyBzdHJva2UgY29sb3JcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IHN0eWxlLnByb3BlcnRpZXMuc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZTogc3R5bGUucHJvcGVydGllcy5iYWNrZ3JvdW5kSW1hZ2UsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRGaXQ6IHN0eWxlLnByb3BlcnRpZXMuYmFja2dyb3VuZEZpdCxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZFBvc1g6IHN0eWxlLnByb3BlcnRpZXMuYmFja2dyb3VuZFBvc1gsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRQb3NZOiBzdHlsZS5wcm9wZXJ0aWVzLmJhY2tncm91bmRQb3NZLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kV2lkdGg6IHN0eWxlLnByb3BlcnRpZXMuYmFja2dyb3VuZFdpZHRoLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kSGVpZ2h0OiBzdHlsZS5wcm9wZXJ0aWVzLmJhY2tncm91bmRIZWlnaHQsXG4gICAgICAgICAgICAgIGJhY2tncm91bmRJbWFnZU9wYWNpdHk6IHN0eWxlLnByb3BlcnRpZXMuYmFja2dyb3VuZEltYWdlT3BhY2l0eSxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZE9wYWNpdHk6IHN0eWxlLnByb3BlcnRpZXMuYmFja2dyb3VuZE9wYWNpdHlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB4bWxTdHlsZS5zZXRSZW5kZXJHcm91cChnKTtcbiAgICAgICAgICBsaXN0T2ZTdHlsZXMuYWRkU3R5bGUoeG1sU3R5bGUpO1xuICAgICAgfVxuICAgICAgcmVuZGVySW5mb3JtYXRpb24uc2V0TGlzdE9mU3R5bGVzKGxpc3RPZlN0eWxlcyk7XG5cbiAgICAgIHJldHVybiByZW5kZXJJbmZvcm1hdGlvbjtcbiAgfTtcblxuICBqc29uVG9TYmdubWwuZ2V0QW5ub3RhdGlvbkV4dGVuc2lvbiA9IGZ1bmN0aW9uKGN5RWxlbWVudCkge1xuICAgICAgdmFyIGFubm90YXRpb25zID0gY3lFbGVtZW50LmRhdGEoJ2Fubm90YXRpb25zJyk7XG4gICAgICB2YXIgYW5ub3RFeHQgPSBuZXcgYW5ub3QuQW5ub3RhdGlvbigpO1xuICAgICAgdmFyIHJkZkVsZW1lbnQgPSBuZXcgYW5ub3QuUmRmRWxlbWVudCgpO1xuICAgICAgZm9yICh2YXIgYW5ub3RJRCBpbiBhbm5vdGF0aW9ucykge1xuICAgICAgICAgIHZhciBjdXJyZW50QW5ub3QgPSBhbm5vdGF0aW9uc1thbm5vdElEXTtcblxuICAgICAgICAgIC8vIGNoZWNrIHZhbGlkaXR5IG9mIGFubm90YXRpb25cbiAgICAgICAgICBpZihjdXJyZW50QW5ub3Quc3RhdHVzICE9ICd2YWxpZGF0ZWQnIHx8ICFjdXJyZW50QW5ub3Quc2VsZWN0ZWREQiB8fCAhY3VycmVudEFubm90LmFubm90YXRpb25WYWx1ZSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjaGVjayBpZiB1bmNvbnRyb2xsZWQgdm9jYWJ1bGFyeVxuICAgICAgICAgIGlmKGN1cnJlbnRBbm5vdC5zZWxlY3RlZFJlbGF0aW9uID09IFwic2lvOlNJT18wMDAyMjNcIikge1xuICAgICAgICAgICAgICB2YXIgb2JqID0ge307XG4gICAgICAgICAgICAgIG9ialtjdXJyZW50QW5ub3Quc2VsZWN0ZWREQl0gPSBjdXJyZW50QW5ub3QuYW5ub3RhdGlvblZhbHVlO1xuICAgICAgICAgICAgICByZGZFbGVtZW50LmFkZEN1c3RvbVByb3BlcnR5KCcjJytjeUVsZW1lbnQuZGF0YSgnaWQnKSAsIG9iaik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgb2JqID0ge307XG4gICAgICAgICAgICAgIG9ialtjdXJyZW50QW5ub3Quc2VsZWN0ZWRSZWxhdGlvbl0gPSBjdXJyZW50QW5ub3QuYW5ub3RhdGlvblZhbHVlO1xuICAgICAgICAgICAgICByZGZFbGVtZW50LmFkZFJlc291cmNlKCcjJytjeUVsZW1lbnQuZGF0YSgnaWQnKSAsIG9iaik7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgYW5ub3RFeHQuc2V0UmRmRWxlbWVudChyZGZFbGVtZW50KTtcbiAgICAgIHJldHVybiBhbm5vdEV4dDtcbiAgfTtcblxuICBqc29uVG9TYmdubWwuZ2V0R2x5cGhTYmdubWwgPSBmdW5jdGlvbihub2RlLCB2ZXJzaW9uKXtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIG5vZGVDbGFzcyA9IG5vZGUuX3ByaXZhdGUuZGF0YS5jbGFzcztcbiAgICB2YXIgZ2x5cGhMaXN0ID0gW107XG5cbiAgICBpZiggbm9kZUNsYXNzLnN0YXJ0c1dpdGgoJ0JBJykpIHtcbiAgICAgICBub2RlQ2xhc3MgPSBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIjtcbiAgICB9XG5cbiAgICB2YXIgZ2x5cGggPSBuZXcgbGlic2JnbmpzLkdseXBoKHtpZDogbm9kZS5fcHJpdmF0ZS5kYXRhLmlkLCBjbGFzc186IG5vZGVDbGFzc30pO1xuXG4gICAgLy8gYXNzaWduIGNvbXBhcnRtZW50UmVmXG4gICAgaWYobm9kZS5wYXJlbnQoKSAmJiBub2RlLnBhcmVudCgpLmxlbmd0aCA+IDApe1xuICAgICAgIGlmKG5vZGVDbGFzcyA9PT0gXCJjb21wYXJ0bWVudFwiKXtcbiAgICAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50KCk7XG4gICAgICAgICAgIGdseXBoLmNvbXBhcnRtZW50UmVmID0gbm9kZS5fcHJpdmF0ZS5kYXRhLnBhcmVudDtcbiAgICAgICB9XG4gICAgICAgZWxzZSB7XG4gICAgICAgICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudCgpWzBdO1xuICAgICAgICAgICBpZihwYXJlbnQuX3ByaXZhdGUuZGF0YS5jbGFzcyA9PSBcImNvbXBhcnRtZW50XCIpXG4gICAgICAgICAgICAgICBnbHlwaC5jb21wYXJ0bWVudFJlZiA9IHBhcmVudC5fcHJpdmF0ZS5kYXRhLmlkO1xuICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBtaXNjIGluZm9ybWF0aW9uXG4gICAgdmFyIGxhYmVsID0gbm9kZS5fcHJpdmF0ZS5kYXRhLmxhYmVsO1xuICAgIGlmKHR5cGVvZiBsYWJlbCAhPSAndW5kZWZpbmVkJylcbiAgICAgICBnbHlwaC5zZXRMYWJlbChuZXcgbGlic2JnbmpzLkxhYmVsKHt0ZXh0OiBsYWJlbH0pKTtcbiAgICAvL2FkZCBjbG9uZSBpbmZvcm1hdGlvblxuICAgIGlmKHR5cGVvZiBub2RlLl9wcml2YXRlLmRhdGEuY2xvbmVtYXJrZXIgIT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgZ2x5cGguc2V0Q2xvbmUobmV3IGxpYnNiZ25qcy5DbG9uZVR5cGUoKSk7XG4gICAgLy9hZGQgYmJveCBpbmZvcm1hdGlvblxuICAgIGdseXBoLnNldEJib3godGhpcy5hZGRHbHlwaEJib3gobm9kZSkpO1xuXG4gICAgaWYobm9kZS5pc1BhcmVudCgpIHx8IG5vZGUuZGF0YSgpLmNsYXNzID09ICd0b3BvbG9neSBncm91cCcgfHwgbm9kZS5kYXRhKCkuY2xhc3MgPT0gJ3N1Ym1hcCcgfHwgbm9kZS5kYXRhKCkuY2xhc3MgPT0gJ2NvbXBsZXgnIHx8IG5vZGUuZGF0YSgpLmNsYXNzID09ICdjb21wYXJ0bWVudCcpe1xuICAgICAgdmFyIGV4dHJhSW5mbyA9IHt9O1xuICAgICAgZXh0cmFJbmZvLncgPSBub2RlLndpZHRoKCk7XG4gICAgICBleHRyYUluZm8uaCA9IG5vZGUuaGVpZ2h0KCk7XG4gICAgICBleHRyYUluZm8ubWluVyA9IE51bWJlcihub2RlLmNzcyhcIm1pbi13aWR0aFwiKS5yZXBsYWNlKFwicHhcIixcIlwiKSk7XG4gICAgICBleHRyYUluZm8ubWluSCA9IE51bWJlcihub2RlLmNzcyhcIm1pbi1oZWlnaHRcIikucmVwbGFjZShcInB4XCIsXCJcIikpO1xuICAgICAgZXh0cmFJbmZvLldMQmlhcyA9IE51bWJlcihub2RlLmNzcyhcIm1pbi13aWR0aC1iaWFzLWxlZnRcIikucmVwbGFjZShcInB4XCIsXCJcIikpO1xuICAgICAgZXh0cmFJbmZvLldSQmlhcyA9IE51bWJlcihub2RlLmNzcyhcIm1pbi13aWR0aC1iaWFzLXJpZ2h0XCIpLnJlcGxhY2UoXCJweFwiLFwiXCIpKTtcbiAgICAgIGV4dHJhSW5mby5IVEJpYXMgPSBOdW1iZXIobm9kZS5jc3MoXCJtaW4taGVpZ2h0LWJpYXMtdG9wXCIpLnJlcGxhY2UoXCJweFwiLFwiXCIpKTtcbiAgICAgIGV4dHJhSW5mby5IQkJpYXMgPSBOdW1iZXIobm9kZS5jc3MoXCJtaW4taGVpZ2h0LWJpYXMtYm90dG9tXCIpLnJlcGxhY2UoXCJweFwiLFwiXCIpKTtcbiAgICAgIGdseXBoLnNldEV4dGVuc2lvbihuZXcgbGlic2JnbmpzLkV4dGVuc2lvbigpKTtcbiAgICAgIGdseXBoLmV4dGVuc2lvbi5hZGQoY29tcG91bmRFeHRlbnNpb25CdWlsZGVyLmJ1aWxkT2JqZWN0KGV4dHJhSW5mbykpO1xuXG4gICAgfVxuICAgXG4gICAgLy9hZGQgcG9ydCBpbmZvcm1hdGlvblxuICAgIHZhciBwb3J0cyA9IG5vZGUuX3ByaXZhdGUuZGF0YS5wb3J0cztcbiAgICBmb3IodmFyIGkgPSAwIDsgaSA8IHBvcnRzLmxlbmd0aCA7IGkrKyl7XG4gICAgICAgdmFyIG9yaWVudGF0aW9uID0gcG9ydHNbaV0ueCA9PT0gMCA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICAgLy8gVGhpcyBpcyB0aGUgcmF0aW8gb2YgdGhlIGFyZWEgb2NjdXBpZWQgZm9yIHBvcnRzIG92ZXIgdGhlIHdob2xlIHNoYXBlXG4gICAgICAgdmFyIHJhdGlvID0gb3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcgPyBNYXRoLmFicyhwb3J0c1tpXS55KSAvIDUwIDogTWF0aC5hYnMocG9ydHNbaV0ueCkgLyA1MDtcblxuICAgICAgIC8vIERpdmlkZSB0aGUgbm9kZSBzaXplcyBieSB0aGUgcmF0aW8gYmVjYXVzZSB0aGF0IHNpemVzIGluY2x1ZGVzIHBvcnRzIGFzIHdlbGxcbiAgICAgICB2YXIgeCA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueCArIHBvcnRzW2ldLnggKiAoIG5vZGUud2lkdGgoKSAvIHJhdGlvICkgLyAxMDA7XG4gICAgICAgdmFyIHkgPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLnkgKyBwb3J0c1tpXS55ICogKCBub2RlLmhlaWdodCgpIC8gcmF0aW8gKSAvIDEwMDtcblxuICAgICAgIGdseXBoLmFkZFBvcnQobmV3IGxpYnNiZ25qcy5Qb3J0KHtpZDogcG9ydHNbaV0uaWQsIHg6IHgsIHk6IHl9KSk7XG4gICAgfVxuICAgIC8vYWRkIHN0YXRlIGFuZCBpbmZvIGJveCBpbmZvcm1hdGlvblxuICAgIGZvcih2YXIgaSA9IDAgOyBpIDwgbm9kZS5fcHJpdmF0ZS5kYXRhLnN0YXRlc2FuZGluZm9zLmxlbmd0aCA7IGkrKyl7XG4gICAgICAgdmFyIGJveEdseXBoID0gbm9kZS5fcHJpdmF0ZS5kYXRhLnN0YXRlc2FuZGluZm9zW2ldO1xuICAgICAgIHZhciBzdGF0ZXNhbmRpbmZvc0lkID0gYm94R2x5cGguaWQ7XG4gICAgICAgaWYoYm94R2x5cGguY2xhenogPT09IFwic3RhdGUgdmFyaWFibGVcIil7XG4gICAgICAgICAgIGdseXBoLmFkZEdseXBoTWVtYmVyKHRoaXMuYWRkU3RhdGVCb3hHbHlwaChib3hHbHlwaCwgc3RhdGVzYW5kaW5mb3NJZCwgbm9kZSkpO1xuICAgICAgIH1cbiAgICAgICBlbHNlIGlmKGJveEdseXBoLmNsYXp6ID09PSBcInVuaXQgb2YgaW5mb3JtYXRpb25cIil7XG4gICAgICAgICAgIGdseXBoLmFkZEdseXBoTWVtYmVyKHRoaXMuYWRkSW5mb0JveEdseXBoKGJveEdseXBoLCBzdGF0ZXNhbmRpbmZvc0lkLCBub2RlKSk7XG4gICAgICAgfVxuICAgIH1cbiAgICAvLyBjaGVjayBmb3IgYW5ub3RhdGlvbnNcbiAgICBpZiAodmVyc2lvbiAhPT0gXCJwbGFpblwiICYmIG5vZGUuZGF0YSgnYW5ub3RhdGlvbnMnKSAmJiAhJC5pc0VtcHR5T2JqZWN0KG5vZGUuZGF0YSgnYW5ub3RhdGlvbnMnKSkpIHtcbiAgICAgIHZhciBleHRlbnNpb24gPSBzZWxmLmdldE9yQ3JlYXRlRXh0ZW5zaW9uKGdseXBoKTtcbiAgICAgIHZhciBhbm5vdEV4dCA9IHNlbGYuZ2V0QW5ub3RhdGlvbkV4dGVuc2lvbihub2RlKTtcbiAgICAgIGV4dGVuc2lvbi5hZGQoYW5ub3RFeHQpO1xuICAgIH1cbiAgICAvLyBhZGQgZ2x5cGggbWVtYmVycyB0aGF0IGFyZSBub3Qgc3RhdGUgdmFyaWFibGVzIG9yIHVuaXQgb2YgaW5mbzogc3VidW5pdHNcbiAgICBpZihub2RlQ2xhc3MgPT09IFwiY29tcGxleFwiIHx8IG5vZGVDbGFzcyA9PT0gXCJjb21wbGV4IG11bHRpbWVyXCIgfHwgbm9kZUNsYXNzID09PSBcInN1Ym1hcFwiIHx8IG5vZGVDbGFzcyA9PT0gXCJ0b3BvbG9neSBncm91cFwiKXtcbiAgICAgICB2YXIgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuKCk7XG4gICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi51bmlvbih0aGlzLmFsbENvbGxhcHNlZE5vZGVzKTtcbiAgICAgICBpZihub2RlLmRhdGEoJ2NvbGxhcHNlZENoaWxkcmVuJykpIHtcbiAgICAgICAgIHZhciBjb2xsYXBzZWRDaGlsZHJlbiA9IG5vZGUuZGF0YSgnY29sbGFwc2VkQ2hpbGRyZW4nKTtcbiAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4udW5pb24oY29sbGFwc2VkQ2hpbGRyZW4pO1xuICAgICAgIH1cbiAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihcIltwYXJlbnQgPSAnXCIrIG5vZGUuaWQoKSArIFwiJ11cIilcblxuICAgICAgIGNoaWxkcmVuLmVhY2goZnVuY3Rpb24oZWxlLCBpKXtcbiAgICAgICAgICAgaWYodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgdmFyIGdseXBoTWVtYmVyTGlzdCA9IHNlbGYuZ2V0R2x5cGhTYmdubWwoZWxlLCB2ZXJzaW9uKTtcbiAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgZ2x5cGhNZW1iZXJMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICBnbHlwaC5hZGRHbHlwaE1lbWJlcihnbHlwaE1lbWJlckxpc3RbaV0pO1xuICAgICAgICAgICB9XG4gICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFyIHNiZ252aXpFeHRTdHJpbmcgPSBcIlwiO1xuICAgIHZhciBoYXNOZXd0RXh0ID0gZmFsc2U7XG5cbiAgICAvLyBhZGQgaW5mbyBmb3IgY29sbGFwc2VkIG5vZGVzXG4gICAgaWYobm9kZS5kYXRhKCdjb2xsYXBzZWRDaGlsZHJlbicpKSB7XG4gICAgICAgc2JnbnZpekV4dFN0cmluZyArPSBcIjxjb2xsYXBzZWQvPlwiO1xuICAgICAgIHNiZ252aXpFeHRTdHJpbmcgKz0gXCI8cG9zaXRpb25CZWZvcmVTYXZpbmcgeD0nXCIgKyBub2RlLnBvc2l0aW9uKCkueCArXCInIHk9J1wiICsgbm9kZS5wb3NpdGlvbigpLnkgKyBcIicvPlwiO1xuICAgICAgIGhhc05ld3RFeHQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGFkZCBpbmZvIGZvciBoaWRkZW4gbm9kZXNcbiAgICBpZihub2RlLmhpZGRlbigpKSB7XG4gICAgICAgc2JnbnZpekV4dFN0cmluZyArPSBcIjxoaWRkZW4vPlwiO1xuICAgICAgIGhhc05ld3RFeHQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGFkZCBpbmZvIGZvciBub2RlcyB3aGljaCBoYXMgaGlkZGVuIG5laWdoYm91clxuICAgIGlmKG5vZGUuZGF0YShcInRoaWNrQm9yZGVyXCIpKSB7XG4gICAgICAgc2JnbnZpekV4dFN0cmluZyArPSBcIjxoYXNIaWRkZW5OZWlnaGJvdXIvPlwiO1xuICAgICAgIGhhc05ld3RFeHQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGFkZCBzdHJpbmcgdG8gYSBuZXcgZXh0ZW5zaW9uIGZvciB0aGlzIGdseXBoXG4gICAgaWYoaGFzTmV3dEV4dCkge1xuICAgICAgIHZhciBleHRlbnNpb24gPSBzZWxmLmdldE9yQ3JlYXRlRXh0ZW5zaW9uKGdseXBoKTtcbiAgICAgICBleHRlbnNpb24uYWRkKFwiPHNiZ252aXo+XCIrc2JnbnZpekV4dFN0cmluZytcIjwvc2JnbnZpej5cIik7XG4gICAgfVxuXG4gICAgLy8gY3VycmVudCBnbHlwaCBpcyBkb25lXG4gICAgZ2x5cGhMaXN0LnB1c2goZ2x5cGgpO1xuXG4gICAgLy8ga2VlcCBnb2luZyB3aXRoIGFsbCB0aGUgaW5jbHVkZWQgZ2x5cGhzXG4gICAgaWYobm9kZUNsYXNzID09PSBcImNvbXBhcnRtZW50XCIpe1xuICAgICAgIHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4oKTtcbiAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLnVuaW9uKHRoaXMuYWxsQ29sbGFwc2VkTm9kZXMpO1xuICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKFwiW3BhcmVudCA9ICdcIisgbm9kZS5pZCgpICsgXCInXVwiKVxuICAgICAgIGNoaWxkcmVuLmVhY2goZnVuY3Rpb24oZWxlLCBpKXtcbiAgICAgICAgICAgaWYodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgIGVsZSA9IGk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgZ2x5cGhMaXN0ID0gZ2x5cGhMaXN0LmNvbmNhdChzZWxmLmdldEdseXBoU2Jnbm1sKGVsZSwgdmVyc2lvbikpO1xuICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAgZ2x5cGhMaXN0O1xuICB9O1xuXG4gIC8vIGVsZW1lbnQ6IGEgbGlic2Jnbi5qcyBnbHlwaCBvciBlZGdlIG9iamVjdFxuICBqc29uVG9TYmdubWwuZ2V0T3JDcmVhdGVFeHRlbnNpb24gPSBmdW5jdGlvbihlbGVtZW50KSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uO1xuICAgICAgaWYoZWxlbWVudC5leHRlbnNpb24pIHsgLy8gYW4gZXh0ZW5zaW9uIGlzIGFscmVhZHkgdGhlcmUgZm9yIHRoaXMgZWxlbWVudFxuICAgICAgICAgIGV4dGVuc2lvbiA9IGVsZW1lbnQuZXh0ZW5zaW9uO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgICAgZXh0ZW5zaW9uID0gbmV3IGxpYnNiZ25qcy5FeHRlbnNpb24oKTtcbiAgICAgICAgICBlbGVtZW50LnNldEV4dGVuc2lvbihleHRlbnNpb24pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dGVuc2lvbjtcbiAgfTtcblxuICBqc29uVG9TYmdubWwuZ2V0QXJjU2Jnbm1sID0gZnVuY3Rpb24oZWRnZSwgdmVyc2lvbil7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vVGVtcG9yYXJ5IGhhY2sgdG8gcmVzb2x2ZSBcInVuZGVmaW5lZFwiIGFyYyBzb3VyY2UgYW5kIHRhcmdldHNcbiAgICB2YXIgYXJjVGFyZ2V0ID0gZWRnZS5fcHJpdmF0ZS5kYXRhLnBvcnR0YXJnZXQ7XG4gICAgdmFyIGFyY1NvdXJjZSA9IGVkZ2UuX3ByaXZhdGUuZGF0YS5wb3J0c291cmNlO1xuXG4gICAgaWYgKGFyY1NvdXJjZSA9PSBudWxsIHx8IGFyY1NvdXJjZS5sZW5ndGggPT09IDApXG4gICAgICAgYXJjU291cmNlID0gZWRnZS5fcHJpdmF0ZS5kYXRhLnNvdXJjZTtcblxuICAgIGlmIChhcmNUYXJnZXQgPT0gbnVsbCB8fCBhcmNUYXJnZXQubGVuZ3RoID09PSAwKVxuICAgICAgIGFyY1RhcmdldCA9IGVkZ2UuX3ByaXZhdGUuZGF0YS50YXJnZXQ7XG5cbiAgICB2YXIgYXJjSWQgPSBlZGdlLl9wcml2YXRlLmRhdGEuaWQ7XG4gICAgdmFyIGFyYyA9IG5ldyBsaWJzYmduanMuQXJjKHtpZDogYXJjSWQsIHNvdXJjZTogYXJjU291cmNlLCB0YXJnZXQ6IGFyY1RhcmdldCwgY2xhc3NfOiBlZGdlLl9wcml2YXRlLmRhdGEuY2xhc3N9KTtcblxuICAgIGFyYy5zZXRTdGFydChuZXcgbGlic2JnbmpzLlN0YXJ0VHlwZSh7eDogZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaC5zdGFydFgsIHk6IGVkZ2UuX3ByaXZhdGUucnNjcmF0Y2guc3RhcnRZfSkpO1xuXG4gICAgLy8gRXhwb3J0IGFuY2hvciBwb2ludHMgaWYgZWRnZUVkaXRpbmdFeHRlbnNpb24gaXMgcmVnaXN0ZXJlZFxuICAgIGlmIChjeS5lZGdlRWRpdGluZyAmJiBjeS5lZGdlRWRpdGluZygnaW5pdGlhbGl6ZWQnKSkge1xuICAgICB2YXIgc2VncHRzID0gY3kuZWRnZUVkaXRpbmcoJ2dldCcpLmdldEFuY2hvcnNBc0FycmF5KGVkZ2UpO1xuICAgICBpZih0eXBlb2Ygc2VncHRzICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgaWYoc2VncHRzLmxlbmd0aCA+IDApe1xuICAgICAgICBmb3IodmFyIGkgPSAwOyBzZWdwdHMgJiYgaSA8IHNlZ3B0cy5sZW5ndGg7IGkgPSBpICsgMil7XG4gICAgICAgICAgdmFyIGFuY2hvclggPSBzZWdwdHNbaV07XG4gICAgICAgICAgdmFyIGFuY2hvclkgPSBzZWdwdHNbaSArIDFdO1xuICAgICAgICAgIGFyYy5hZGROZXh0KG5ldyBsaWJzYmduanMuTmV4dFR5cGUoe3g6IGFuY2hvclgsIHk6IGFuY2hvcll9KSk7XG4gICAgICAgIH1cbiAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhcmMuc2V0RW5kKG5ldyBsaWJzYmduanMuRW5kVHlwZSh7eDogZWRnZS5fcHJpdmF0ZS5yc2NyYXRjaC5lbmRYLCB5OiBlZGdlLl9wcml2YXRlLnJzY3JhdGNoLmVuZFl9KSk7XG5cbiAgICB2YXIgY2FyZGluYWxpdHkgPSBlZGdlLl9wcml2YXRlLmRhdGEuY2FyZGluYWxpdHk7XG4gICAgaWYodHlwZW9mIGNhcmRpbmFsaXR5ICE9ICd1bmRlZmluZWQnICYmIGNhcmRpbmFsaXR5ICE9IG51bGwgJiYgY2FyZGluYWxpdHkgIT0gMCkge1xuICAgICAgdmFyIGVkZ2ViQm94ID0gZWRnZS5ib3VuZGluZ0JveCh7IGluY2x1ZGVMYWJlbHM6IHRydWUsIGluY2x1ZGVOb2RlczogZmFsc2UsIGluY2x1ZGVFZGdlczogZmFsc2UsIGluY2x1ZGVPdmVybGF5czogZmFsc2UgfSk7XG4gICAgICAgYXJjLmFkZEdseXBoKG5ldyBsaWJzYmduanMuR2x5cGgoe1xuICAgICAgICAgICBpZDogYXJjLmlkKydfY2FyZCcsXG4gICAgICAgICAgIGNsYXNzXzogJ3N0b2ljaGlvbWV0cnknLFxuICAgICAgICAgICBsYWJlbDogbmV3IGxpYnNiZ25qcy5MYWJlbCh7dGV4dDogY2FyZGluYWxpdHl9KSxcbiAgICAgICAgICAgYmJveDogbmV3IGxpYnNiZ25qcy5CYm94KHt4OiBlZGdlYkJveC54MSwgeTogZWRnZWJCb3gueTEsIHc6IGVkZ2ViQm94LncsIGg6IGVkZ2ViQm94Lmh9KSAvLyBkdW1teSBiYm94LCBuZWVkZWQgZm9yIGZvcm1hdCBjb21wbGlhbmNlXG4gICAgICAgfSkpO1xuICAgIH1cbiAgICAvLyBjaGVjayBmb3IgYW5ub3RhdGlvbnNcbiAgICBpZiAoZWRnZS5kYXRhKCdhbm5vdGF0aW9ucycpICYmICEkLmlzRW1wdHlPYmplY3QoZWRnZS5kYXRhKCdhbm5vdGF0aW9ucycpKSkge1xuICAgICAgIHZhciBleHRlbnNpb24gPSBzZWxmLmdldE9yQ3JlYXRlRXh0ZW5zaW9uKGFyYyk7XG4gICAgICAgdmFyIGFubm90RXh0ID0gdGhpcy5nZXRBbm5vdGF0aW9uRXh0ZW5zaW9uKGVkZ2UpO1xuICAgICAgIGV4dGVuc2lvbi5hZGQoYW5ub3RFeHQpO1xuICAgIH1cblxuICAgIC8vIGFkZCBpbmZvIGZvciBoaWRkZW4gZWRnZXNcbiAgICBpZihlZGdlLmhpZGRlbigpKSB7XG4gICAgICAgdmFyIGV4dGVuc2lvbiA9IHNlbGYuZ2V0T3JDcmVhdGVFeHRlbnNpb24oYXJjKTtcbiAgICAgICBleHRlbnNpb24uYWRkKFwiPHNiZ252aXo+PGhpZGRlbi8+PC9zYmdudml6PlwiKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgaW5mbyBhYm91dCBlZGdlIHR5cGVcbiAgICAvLyBzaW5jZSBjdXJ2ZSBzdHlsZSBpcyBub3Qgc3RhbmRhcmQgd2Ugc2hvdWxkbid0IGhhdmUgaXQgZm9yIGVpdGhlciB2ZXJzaW9uXG4gICAgaWYgKGVkZ2UuY3NzKCdjdXJ2ZS1zdHlsZScpICYmIHZlcnNpb24gIT09IFwicGxhaW5cIiAmJiB2ZXJzaW9uICE9PSBcInBsYWluM1wiKSB7XG4gICAgICB2YXIgZXh0ZW5zaW9uID0gc2VsZi5nZXRPckNyZWF0ZUV4dGVuc2lvbihhcmMpO1xuICAgICAgZXh0ZW5zaW9uLmFkZChcIjxjdXJ2ZVN0eWxlPlwiICsgZWRnZS5jc3MoJ2N1cnZlLXN0eWxlJykgKyBcIjwvY3VydmVTdHlsZT5cIik7XG4gICAgfVxuICAgIFxuICAgIGlmIChlZGdlLmRhdGEoJ3NpZi1tZXRhJykgJiYgdmVyc2lvbiAhPT0gXCJwbGFpblwiICYmIHZlcnNpb24gIT09IFwicGxhaW4zXCIpIHtcbiAgICAgIHZhciBleHRlbnNpb24gPSBzZWxmLmdldE9yQ3JlYXRlRXh0ZW5zaW9uKGFyYyk7XG4gICAgICBleHRlbnNpb24uYWRkKFwiPHNpZk1ldGFFZGdlPnRydWU8L3NpZk1ldGFFZGdlPlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJjO1xuICB9O1xuXG4gIGpzb25Ub1NiZ25tbC5hZGRHbHlwaEJib3ggPSBmdW5jdGlvbihub2RlKXtcbiAgICBcbiAgICB2YXIgcGFkZGluZyA9IG5vZGUucGFkZGluZygpO1xuICAgIHZhciBib3JkZXJXaWR0aCA9IE51bWJlcihub2RlLmNzcyhcImJvcmRlci13aWR0aFwiKS5yZXBsYWNlKFwicHhcIixcIlwiKSk7XG4gICAgdmFyIF9jbGFzcyA9IG5vZGUuZGF0YSgnY2xhc3MnKTtcbiAgICB2YXIgd2lkdGggPSBub2RlLm91dGVyV2lkdGgoKSAtIGJvcmRlcldpZHRoIDtcbiAgICB2YXIgaGVpZ2h0ID0gbm9kZS5vdXRlckhlaWdodCgpIC0gYm9yZGVyV2lkdGg7XG4gICAgLy8gSWYgdGhlIG5vZGUgY2FuIGhhdmUgcG9ydHMgYW5kIGl0IGhhcyBleGFjdGx5IDIgcG9ydHMgdGhlbiBpdCBpcyByZXByZXNlbnRlZCBieSBhIGJpZ2dlciBiYm94LlxuICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB3ZSByZXByZXNlbnQgaXQgYXMgYSBwb2x5Z29uIGFuZCBzbyB0aGUgd2hvbGUgc2hhcGUgaW5jbHVkaW5nIHRoZSBwb3J0cyBhcmUgcmVuZGVyZWQgaW4gdGhlIG5vZGUgYmJveC5cbiAgICBpZiAoZWxlbWVudFV0aWxpdGllcy5jYW5IYXZlUG9ydHMoX2NsYXNzKSkge1xuICAgICAgaWYgKG5vZGUuZGF0YSgncG9ydHMnKS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgcG9ydHMgYXJlIHN5bW1ldHJpYyB0byB0aGUgbm9kZSBjZW50ZXIgc28gdXNpbmcganVzdCBvbmUgb2YgdGhlIHBvcnRzIGlzIGVub3VnaFxuICAgICAgIHZhciBwb3J0ID0gbm9kZS5kYXRhKCdwb3J0cycpWzBdO1xuICAgICAgIHZhciBvcmllbnRhdGlvbiA9IHBvcnQueCA9PT0gMCA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICAgLy8gVGhpcyBpcyB0aGUgcmF0aW8gb2YgdGhlIGFyZWEgb2NjdXBpZWQgd2l0aCBwb3J0cyBvdmVyIHdpdGhvdXQgcG9ydHNcbiAgICAgICB2YXIgcmF0aW8gPSBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IE1hdGguYWJzKHBvcnQueSkgLyA1MCA6IE1hdGguYWJzKHBvcnQueCkgLyA1MDtcbiAgICAgICAvLyBEaXZpZGUgdGhlIGJib3ggdG8gdGhlIGNhbGN1bGF0ZWQgcmF0aW8gdG8gZ2V0IHRoZSBiYm94IG9mIHRoZSBhY3R1YWwgc2hhcGUgZGlzY2x1ZGluZyB0aGUgcG9ydHNcbiAgICAgICB3aWR0aCAvPSByYXRpbztcbiAgICAgICBoZWlnaHQgLz0gcmF0aW87XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHggPSBub2RlLnBvc2l0aW9uKCkueCAtIHdpZHRoLzI7XG4gICAgdmFyIHkgPSBub2RlLnBvc2l0aW9uKCkueS0gaGVpZ2h0LzI7XG4gICAgLy92YXIgeCA9bm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi54IC0gd2lkdGgvMiAtIHBhZGRpbmc7ICAgIFxuICAgIC8vdmFyIHkgPSBub2RlLl9wcml2YXRlLnBvc2l0aW9uLnkgLSBoZWlnaHQvMiAtIHBhZGRpbmc7XG4gICAgLy92YXIgeCA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueCAtIHdpZHRoLzI7XG4gICAgLy92YXIgeSA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueSAtIGhlaWdodC8yO1xuXG4gICAgcmV0dXJuIG5ldyBsaWJzYmduanMuQmJveCh7eDogeCwgeTogeSwgdzogd2lkdGgsIGg6IGhlaWdodH0pO1xuICB9O1xuXG4gIGpzb25Ub1NiZ25tbC5hZGRTdGF0ZUFuZEluZm9CYm94ID0gZnVuY3Rpb24obm9kZSwgYm94R2x5cGgpe1xuICAgICAgYm94QmJveCA9IGJveEdseXBoLmJib3g7XG4gICAgICB2YXIgYm9yZGVyV2lkdGggPSBub2RlLmRhdGEoKVsnYm9yZGVyLXdpZHRoJ107XG4gICAgICB2YXIgcGFkZGluZyA9IG5vZGUucGFkZGluZygpO1xuICAgICAgdmFyIHggPSAoKGJveEJib3gueCAqIChub2RlLm91dGVyV2lkdGgoKSAtIGJvcmRlcldpZHRoKSkgLyAxMDApICsgKG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueCAtIG5vZGUud2lkdGgoKS8yIC0gcGFkZGluZyAtIGJveEJib3gudy8yKTtcbiAgICAgIHZhciB5ID0gKChib3hCYm94LnkgKiAobm9kZS5vdXRlckhlaWdodCgpIC0gYm9yZGVyV2lkdGgpKSAvIDEwMCkgKyAobm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi55IC0gbm9kZS5oZWlnaHQoKS8yIC0gcGFkZGluZyAtIGJveEJib3guaC8yKTtcbiAgICAgIC8vdmFyIHggPSBib3hCYm94LnggLyAxMDAgKiBub2RlLndpZHRoKCk7XG4gICAgICAvL3ZhciB5ID0gYm94QmJveC55IC8gMTAwICogbm9kZS5oZWlnaHQoKTtcblxuICAgICAgLy94ID0gbm9kZS5fcHJpdmF0ZS5wb3NpdGlvbi54IC0gbm9kZS53aWR0aCgpLzIgKyAoeCAtIGJveEJib3gudy8yKTtcbiAgICAgIC8veSA9IG5vZGUuX3ByaXZhdGUucG9zaXRpb24ueSAtIG5vZGUuaGVpZ2h0KCkvMiArICh5IC0gYm94QmJveC5oLzIpO1xuICAgICAgXG4gICAgICByZXR1cm4gbmV3IGxpYnNiZ25qcy5CYm94KHt4OiB4LCB5OiB5LCB3OiBib3hCYm94LncsIGg6IGJveEJib3guaH0pO1xuICB9O1xuXG4gIGpzb25Ub1NiZ25tbC5hZGRTdGF0ZUJveEdseXBoID0gZnVuY3Rpb24obm9kZSwgaWQsIG1haW5HbHlwaCl7XG5cbiAgICAgIHZhciBnbHlwaCA9IG5ldyBsaWJzYmduanMuR2x5cGgoe2lkOiBpZCwgY2xhc3NfOiAnc3RhdGUgdmFyaWFibGUnfSk7XG4gICAgICB2YXIgc3RhdGUgPSBuZXcgbGlic2JnbmpzLlN0YXRlVHlwZSgpO1xuICAgICAgaWYodHlwZW9mIG5vZGUuc3RhdGUudmFsdWUgIT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgc3RhdGUudmFsdWUgPSBub2RlLnN0YXRlLnZhbHVlO1xuICAgICAgaWYodHlwZW9mIG5vZGUuc3RhdGUudmFyaWFibGUgIT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgc3RhdGUudmFyaWFibGUgPSBub2RlLnN0YXRlLnZhcmlhYmxlO1xuICAgICAgZ2x5cGguc2V0U3RhdGUoc3RhdGUpO1xuICAgICAgZ2x5cGguc2V0QmJveCh0aGlzLmFkZFN0YXRlQW5kSW5mb0Jib3gobWFpbkdseXBoLCBub2RlKSk7XG5cbiAgICAgIHJldHVybiBnbHlwaDtcbiAgfTtcblxuICBqc29uVG9TYmdubWwuYWRkSW5mb0JveEdseXBoID0gZnVuY3Rpb24gKG5vZGUsIGlkLCBtYWluR2x5cGgpIHtcbiAgICAgIHZhciBnbHlwaCA9IG5ldyBsaWJzYmduanMuR2x5cGgoe2lkOiBpZCwgY2xhc3NfOiAndW5pdCBvZiBpbmZvcm1hdGlvbid9KTtcbiAgICAgIHZhciBsYWJlbCA9IG5ldyBsaWJzYmduanMuTGFiZWwoKTtcbiAgICAgIGlmKHR5cGVvZiBub2RlLmxhYmVsLnRleHQgIT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgbGFiZWwudGV4dCA9IG5vZGUubGFiZWwudGV4dDtcbiAgICAgIGdseXBoLnNldExhYmVsKGxhYmVsKTtcbiAgICAgIGdseXBoLnNldEJib3godGhpcy5hZGRTdGF0ZUFuZEluZm9CYm94KG1haW5HbHlwaCwgbm9kZSkpO1xuXG4gICAgICAvLyBhc3NpZ24gY29ycmVjdCBlbnRpdHkgdGFnIGZvciBBRiBjYXNlXG4gICAgICB2YXIgZW50aXR5TmFtZSA9IG51bGw7XG4gICAgICBzd2l0Y2gobWFpbkdseXBoLl9wcml2YXRlLmRhdGEuY2xhc3MpIHtcbiAgICAgICAgICBjYXNlICdCQSB1bnNwZWNpZmllZCBlbnRpdHknOiAgIGVudGl0eU5hbWUgPSBcInVuc3BlY2lmaWVkIGVudGl0eVwiOyBicmVhaztcbiAgICAgICAgICBjYXNlICdCQSBzaW1wbGUgY2hlbWljYWwnOiAgICAgIGVudGl0eU5hbWUgPSBcInNpbXBsZSBjaGVtaWNhbFwiOyBicmVhaztcbiAgICAgICAgICBjYXNlICdCQSBtYWNyb21vbGVjdWxlJzogICAgICAgIGVudGl0eU5hbWUgPSBcIm1hY3JvbW9sZWN1bGVcIjsgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnQkEgbnVjbGVpYyBhY2lkIGZlYXR1cmUnOiBlbnRpdHlOYW1lID0gXCJudWNsZWljIGFjaWQgZmVhdHVyZVwiOyBicmVhaztcbiAgICAgICAgICBjYXNlICdCQSBwZXJ0dXJiaW5nIGFnZW50JzogICAgIGVudGl0eU5hbWUgPSBcInBlcnR1cmJhdGlvblwiOyBicmVhaztcbiAgICAgICAgICBjYXNlICdCQSBjb21wbGV4JzogICAgICAgICAgICAgIGVudGl0eU5hbWUgPSBcImNvbXBsZXhcIjsgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBlbnRpdHkgdGFnIGFyZW4ndCBhbHdheXMgdGhlcmUsIG9ubHkgZm9yIEFGXG4gICAgICAvLyBidXQgd2Ugc3RpbGwgbmVlZCB0byBrZWVwIHRoaXMgaW5mb3JtYXRpb24gZm9yIHVua25vd24gbWFwIHR5cGVcbiAgICAgIGlmKGVudGl0eU5hbWUpIHtcbiAgICAgICAgICBnbHlwaC5zZXRFbnRpdHkobmV3IGxpYnNiZ25qcy5FbnRpdHlUeXBlKHtuYW1lOiBlbnRpdHlOYW1lfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ2x5cGg7XG4gIH07XG5cbiAganNvblRvU2Jnbm1sLmNoaWxkT2ZOb25lID0gZnVuY3Rpb24oZWxlLCBub2Rlcykge1xuICAgIHJldHVybiAhZWxlLmlzQ2hpbGQoKSB8fCBub2Rlcy5nZXRFbGVtZW50QnlJZChlbGUuZGF0YSgncGFyZW50JykpLmxlbmd0aCA9PT0gMDtcbiAgfTtcblxuICByZXR1cm4ganNvblRvU2Jnbm1sO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIGVsZW1lbnRVdGlsaXRpZXMsIGN5O1xuXG4gIGZ1bmN0aW9uIGpzb25Ub1NpZihwYXJhbSkge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVmFsaWRFbmQobm9kZSkge1xuICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmlzU0lGTm9kZSggbm9kZSApIHx8IG5vZGUuZGF0YSgnY2xhc3MnKSA9PSAndG9wb2xvZ3kgZ3JvdXAnO1xuICB9XG5cbiAganNvblRvU2lmLmNvbnZlcnQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGluZXMgPSBbXTtcblxuICAgIHZhciBlZGdlcyA9IGN5LmVkZ2VzKCkuZmlsdGVyKCBmdW5jdGlvbiggZWRnZSApIHtcbiAgICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmlzU0lGRWRnZSggZWRnZSApXG4gICAgICAgICYmIGlzVmFsaWRFbmQoIGVkZ2Uuc291cmNlKCkgKVxuICAgICAgICAmJiBpc1ZhbGlkRW5kKCBlZGdlLnRhcmdldCgpICk7XG4gICAgfSApO1xuXG4gICAgdmFyIG5vZGVzID0gY3kubm9kZXMoKS5maWx0ZXIoIGZ1bmN0aW9uKCBub2RlICkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZOb2RlKCBub2RlICk7XG4gICAgfSApO1xuXG4gICAgbm9kZXMgPSBub2Rlcy5ub3QoIGVkZ2VzLmNvbm5lY3RlZE5vZGVzKCkgKTtcblxuICAgIHZhciBzZXRUb1N0ciA9IGZ1bmN0aW9uKHNldCkge1xuICAgICAgaWYgKCFzZXQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoc2V0KS5qb2luKCc7Jyk7XG4gICAgfTtcblxuICAgIHZhciBnZXRMYWJlbCA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLmRhdGEoJ2xhYmVsJyk7XG4gICAgfTtcblxuICAgIHZhciBpc1ZhbGlkTGFiZWwgPSBmdW5jdGlvbihsYWJlbCl7XG4gICAgICByZXR1cm4gISFsYWJlbDtcbiAgICB9XG5cbiAgICBlZGdlcy5mb3JFYWNoKCBmdW5jdGlvbiggZWRnZSApIHtcbiAgICAgIHZhciBzcmNOYW1lcywgdGd0TmFtZXM7XG5cbiAgICAgIHZhciBnZXROYW1lcyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgdmFyIG5hbWVzO1xuXG4gICAgICAgIGlmIChub2RlLmlzUGFyZW50KCkpIHtcbiAgICAgICAgICBuYW1lcyA9ICBub2RlLmNoaWxkcmVuKCkubWFwKCBnZXRMYWJlbCApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbmFtZXMgPSBbIGdldExhYmVsKG5vZGUpIF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmFtZXMgJiYgbmFtZXMuZmlsdGVyKCBpc1ZhbGlkTGFiZWwgKTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBzcmNOYW1lcyA9IGdldE5hbWVzKGVkZ2Uuc291cmNlKCkpO1xuICAgICAgdmFyIHRndE5hbWVzID0gZ2V0TmFtZXMoZWRnZS50YXJnZXQoKSk7XG5cbiAgICAgIGlmICggIXNyY05hbWVzIHx8ICF0Z3ROYW1lcyB8fCBzcmNOYW1lcy5sZW5ndGggPT0gMCB8fCB0Z3ROYW1lcy5sZW5ndGggPT0gMCApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgdHlwZSA9IGVkZ2UuZGF0YSgnY2xhc3MnKTtcbiAgICAgIHZhciBwY0lEU2V0ID0gZWRnZS5kYXRhKCdwY0lEU2V0Jyk7XG4gICAgICB2YXIgc2l0ZUxvY1NldCA9IGVkZ2UuZGF0YSgnc2l0ZUxvY1NldCcpO1xuICAgICAgdmFyIHBjSURzID0gc2V0VG9TdHIoIHBjSURTZXQgKTtcbiAgICAgIHZhciBzaXRlTG9jYXRpb25zID0gc2V0VG9TdHIoIHNpdGVMb2NTZXQgKTtcblxuICAgICAgc3JjTmFtZXMuZm9yRWFjaCggc3JjTmFtZSA9PiB7XG4gICAgICAgIHRndE5hbWVzLmZvckVhY2goIHRndE5hbWUgPT4ge1xuICAgICAgICAgIHZhciBsaW5lID0gWyBzcmNOYW1lLCB0eXBlLCB0Z3ROYW1lLCBwY0lEcywgc2l0ZUxvY2F0aW9ucyBdLmpvaW4oICdcXHQnICk7XG4gICAgICAgICAgbGluZXMucHVzaCggbGluZSApO1xuICAgICAgICB9ICk7XG4gICAgICB9ICk7XG4gICAgfSApO1xuXG4gICAgbm9kZXMuZm9yRWFjaCggZnVuY3Rpb24oIG5vZGUgKSB7XG4gICAgICB2YXIgbGFiZWwgPSBnZXRMYWJlbCggbm9kZSApO1xuXG4gICAgICBpZiAoIGxhYmVsICkge1xuICAgICAgICBsaW5lcy5wdXNoKCBsYWJlbCApO1xuICAgICAgfVxuICAgIH0gKTtcblxuICAgIHZhciB0ZXh0ID0gbGluZXMuam9pbiggJ1xcbicgKTtcbiAgICByZXR1cm4gdGV4dDtcbiAgfTtcblxuICByZXR1cm4ganNvblRvU2lmO1xufTtcbiIsIi8qXG4gKiBMaXN0ZW4gZG9jdW1lbnQgZm9yIGtleWJvYXJkIGlucHV0cyBhbmQgZXhwb3J0cyB0aGUgdXRpbGl0aWVzIHRoYXQgaXQgbWFrZXMgdXNlIG9mXG4gKi9cblxudmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpO1xudmFyIGxpYnMgPSBsaWJVdGlsaXRpZXMuZ2V0TGlicygpO1xudmFyIGpRdWVyeSA9ICQgPSBsaWJzLmpRdWVyeTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24ga2V5Ym9hcmRJbnB1dFV0aWxpdGllcyAocGFyYW0pIHtcblxuICAgIC8vIExpc3RlbiB0byBldmVudHMgb24gbmV0d29yayBjb250YWluZXJcbiAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsICcuaW50ZWdlci1pbnB1dCcsIGZ1bmN0aW9uKGUpe1xuICAgICAgdmFyIHZhbHVlID0gJCh0aGlzKS5hdHRyKCd2YWx1ZScpO1xuICAgICAgcmV0dXJuIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNJbnRlZ2VyRmllbGRJbnB1dCh2YWx1ZSwgZSk7XG4gICAgfSk7XG5cbiAgICAkKGRvY3VtZW50KS5vbigna2V5ZG93bicsICcuZmxvYXQtaW5wdXQnLCBmdW5jdGlvbihlKXtcbiAgICAgIHZhciB2YWx1ZSA9ICQodGhpcykuYXR0cigndmFsdWUnKTtcbiAgICAgIHJldHVybiBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzRmxvYXRGaWVsZElucHV0KHZhbHVlLCBlKTtcbiAgICB9KTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnLmludGVnZXItaW5wdXQsLmZsb2F0LWlucHV0JywgZnVuY3Rpb24oZSl7XG4gICAgICB2YXIgbWluICAgPSAkKHRoaXMpLmF0dHIoJ21pbicpO1xuICAgICAgdmFyIG1heCAgID0gJCh0aGlzKS5hdHRyKCdtYXgnKTtcbiAgICAgIHZhciB2YWx1ZSA9IHBhcnNlRmxvYXQoJCh0aGlzKS52YWwoKSk7XG5cbiAgICAgIGlmKG1pbiAhPSBudWxsKSB7XG4gICAgICAgIG1pbiA9IHBhcnNlRmxvYXQobWluKTtcbiAgICAgIH1cblxuICAgICAgaWYobWF4ICE9IG51bGwpIHtcbiAgICAgICAgbWF4ID0gcGFyc2VGbG9hdChtYXgpO1xuICAgICAgfVxuXG4gICAgICBpZihtaW4gIT0gbnVsbCAmJiB2YWx1ZSA8IG1pbikge1xuICAgICAgICB2YWx1ZSA9IG1pbjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYobWF4ICE9IG51bGwgJiYgdmFsdWUgPiBtYXgpIHtcbiAgICAgICAgdmFsdWUgPSBtYXg7XG4gICAgICB9XG5cbiAgICAgIGlmKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICBpZihtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbHVlID0gbWluO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWx1ZSA9IG1heDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJCh0aGlzKS52YWwoXCJcIiArIHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNOdW1iZXJLZXkgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuICggZS5rZXlDb2RlID49IDQ4ICYmIGUua2V5Q29kZSA8PSA1NyApIHx8ICggZS5rZXlDb2RlID49IDk2ICYmIGUua2V5Q29kZSA8PSAxMDUgKTtcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzRG90S2V5ID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBlLmtleUNvZGUgPT09IDE5MDtcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzTWludXNTaWduS2V5ID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiBlLmtleUNvZGUgPT09IDEwOSB8fCBlLmtleUNvZGUgPT09IDE4OTtcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzTGVmdEtleSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZS5rZXlDb2RlID09PSAzNztcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzUmlnaHRLZXkgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGUua2V5Q29kZSA9PT0gMzk7XG4gIH07XG5cbiAga2V5Ym9hcmRJbnB1dFV0aWxpdGllcy5pc0JhY2tzcGFjZUtleSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gZS5rZXlDb2RlID09PSA4O1xuICB9O1xuXG4gIGtleWJvYXJkSW5wdXRVdGlsaXRpZXMuaXNUYWJLZXkgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGUua2V5Q29kZSA9PT0gOTtcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzRW50ZXJLZXkgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGUua2V5Q29kZSA9PT0gMTM7XG4gIH07XG5cbiAga2V5Ym9hcmRJbnB1dFV0aWxpdGllcy5pc0ludGVnZXJGaWVsZElucHV0ID0gZnVuY3Rpb24odmFsdWUsIGUpIHtcbiAgICByZXR1cm4gdGhpcy5pc0N0cmxPckNvbW1hbmRQcmVzc2VkKGUpIHx8IHRoaXMuaXNNaW51c1NpZ25LZXkoZSkgfHwgdGhpcy5pc051bWJlcktleShlKVxuICAgICAgICAgICAgfHwgdGhpcy5pc0JhY2tzcGFjZUtleShlKSB8fCB0aGlzLmlzVGFiS2V5KGUpIHx8IHRoaXMuaXNMZWZ0S2V5KGUpIHx8IHRoaXMuaXNSaWdodEtleShlKSB8fCB0aGlzLmlzRW50ZXJLZXkoZSk7XG4gIH07XG5cbiAga2V5Ym9hcmRJbnB1dFV0aWxpdGllcy5pc0Zsb2F0RmllbGRJbnB1dCA9IGZ1bmN0aW9uKHZhbHVlLCBlKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyRmllbGRJbnB1dCh2YWx1ZSwgZSkgfHwgdGhpcy5pc0RvdEtleShlKTtcbiAgfTtcblxuICBrZXlib2FyZElucHV0VXRpbGl0aWVzLmlzQ3RybE9yQ29tbWFuZFByZXNzZWQgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIGUuY3RybEtleSB8fCBlLm1ldGFLZXk7XG4gIH07XG5cbiAgcmV0dXJuIGtleWJvYXJkSW5wdXRVdGlsaXRpZXM7XG59O1xuIiwidmFyIHRkUGFyc2VyID0gcmVxdWlyZSgnLi90YWItZGVsaW1ldGVkLXBhcnNlcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY3ksIG1haW5VdGlsaXRpZXM7XG5cbiAgZnVuY3Rpb24gbGF5b3V0TG9hZGVyKCBwYXJhbSApIHtcbiAgICBjeSA9IHBhcmFtLnNiZ25DeUluc3RhbmNlLmdldEN5KCk7XG4gICAgbWFpblV0aWxpdGllcyA9IHBhcmFtLm1haW5VdGlsaXRpZXM7XG4gIH1cblxuICBsYXlvdXRMb2FkZXIubG9hZCA9IGZ1bmN0aW9uKCBsYXlvdXRUZXh0LCBieU5hbWUgKSB7XG4gICAgdmFyIGxpbmVzID0gdGRQYXJzZXIuZ2V0TGluZXNBcnJheSggbGF5b3V0VGV4dCApO1xuICAgIHZhciBwb3NNYXAgPSB7fTtcblxuICAgIGxpbmVzLmZvckVhY2goIGZ1bmN0aW9uKCBsaW5lICkge1xuICAgICAgdmFyIHRhYnMgPSB0ZFBhcnNlci5nZXRUYWJzQXJyYXkoIGxpbmUgKTtcblxuICAgICAgdmFyIG5vZGVJZDtcblxuICAgICAgaWYgKCBieU5hbWUgKSB7XG4gICAgICAgIHZhciBtYXRjaGluZ05vZGVzID0gbGF5b3V0TG9hZGVyLmdldE5vZGVzQnlOYW1lKCB0YWJzWyAwIF0gKTtcbiAgICAgICAgaWYgKCBtYXRjaGluZ05vZGVzLmxlbmd0aCA9PT0gMCApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZGVhbGx5IHRoZXJlIGlzIG9ubHkgb25lIG1hdGNoaW5nIG5vZGVcbiAgICAgICAgLy8gdXNlIHRoZSBmaXJzdCBvbmUgaW4gYW55IGNhc2VcbiAgICAgICAgbm9kZUlkID0gbWF0Y2hpbmdOb2Rlcy5pZCgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG5vZGVJZCA9IHRhYnNbIDAgXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvc1ggPSBwYXJzZUZsb2F0KCB0YWJzWyAxIF0gKTtcbiAgICAgIHZhciBwb3NZID0gcGFyc2VGbG9hdCggdGFic1sgMiBdICk7XG5cbiAgICAgIHBvc01hcFsgbm9kZUlkIF0gPSB7IHg6IHBvc1gsIHk6IHBvc1kgfTtcbiAgICB9ICk7XG5cbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgIG5hbWU6ICdwcmVzZXQnLFxuICAgICAgcG9zaXRpb25zOiBwb3NNYXAsXG4gICAgICBmaXQ6IGZhbHNlXG4gICAgfTtcblxuICAgIG1haW5VdGlsaXRpZXMucGVyZm9ybUxheW91dCggb3B0aW9ucyApO1xuICB9O1xuXG4gIGxheW91dExvYWRlci5nZXROb2Rlc0J5TmFtZSA9IGZ1bmN0aW9uKCBuYW1lICkge1xuICAgIHJldHVybiBjeS5ub2RlcygpLmZpbHRlciggJ1tsYWJlbD1cIicgKyBuYW1lICsgJ1wiXScgKTtcbiAgfTtcblxuICByZXR1cm4gbGF5b3V0TG9hZGVyO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjeTtcblxuICBmdW5jdGlvbiBsYXlvdXRUb1RleHQoIHBhcmFtICkge1xuICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgfVxuXG4gIGxheW91dFRvVGV4dC5jb252ZXJ0ID0gZnVuY3Rpb24oIGJ5TmFtZSApIHtcbiAgICB2YXIgbm9kZXMgPSBjeS5ub2RlcygpO1xuICAgIHZhciBsaW5lcyA9IFtdO1xuXG4gICAgbm9kZXMubWFwKCBmdW5jdGlvbiggbm9kZSApIHtcbiAgICAgIHZhciBpZE9yTmFtZSA9IGJ5TmFtZSA/IG5vZGUuZGF0YSgnbGFiZWwnKSA6IG5vZGUuaWQoKTtcbiAgICAgIHZhciBwb3NYID0gbm9kZS5wb3NpdGlvbigneCcpO1xuICAgICAgdmFyIHBvc1kgPSBub2RlLnBvc2l0aW9uKCd5Jyk7XG5cbiAgICAgIHZhciBsaW5lID0gWyBpZE9yTmFtZSwgcG9zWCwgcG9zWSBdLmpvaW4oICdcXHQnICk7XG4gICAgICBsaW5lcy5wdXNoKCBsaW5lICk7XG4gICAgfSApO1xuXG4gICAgdmFyIHRleHQgPSBsaW5lcy5qb2luKCAnXFxuJyApO1xuICAgIHJldHVybiB0ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsYXlvdXRUb1RleHQ7XG59O1xuIiwiLyogXG4gKiBVdGlsaXR5IGZpbGUgdG8gZ2V0IGFuZCBzZXQgdGhlIGxpYnJhcmllcyB0byB3aGljaCBzYmdudml6IGlzIGRlcGVuZGVudCBmcm9tIGFueSBmaWxlLlxuICovXG5cbnZhciBsaWJVdGlsaXRpZXMgPSBmdW5jdGlvbigpe1xufTtcblxubGliVXRpbGl0aWVzLnNldExpYnMgPSBmdW5jdGlvbihsaWJzKSB7XG4gIHRoaXMubGlicyA9IGxpYnM7XG59O1xuXG5saWJVdGlsaXRpZXMuZ2V0TGlicyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5saWJzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBsaWJVdGlsaXRpZXM7XG5cbiIsIi8qXG4gKiBUaGVzZSBhcmUgdGhlIG1haW4gdXRpbGl0aWVzIHRvIGJlIGRpcmVjdGx5IHV0aWxpemVkIGJ5IHRoZSB1c2VyIGludGVyYWN0aW9ucy5cbiAqIElkZWFseSwgdGhpcyBmaWxlIGlzIGp1c3QgcmVxdWlyZWQgYnkgaW5kZXguanNcbiAqL1xuXG52YXIgbGliVXRpbGl0aWVzID0gcmVxdWlyZSgnLi9saWItdXRpbGl0aWVzJyk7XG52YXIgbGlicyA9IGxpYlV0aWxpdGllcy5nZXRMaWJzKCk7XG52YXIgalF1ZXJ5ID0gJCA9IGxpYnMualF1ZXJ5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVsZW1lbnRVdGlsaXRpZXMsIGpzb25Ub1NiZ25tbCwgc2Jnbm1sVG9Kc29uLCB0ZFRvSnNvbiwgbnd0VG9Kc29uLFxuICAgICAgc2lmVG9Kc29uLCBvcHRpb25VdGlsaXRpZXMsIGdyYXBoVXRpbGl0aWVzLCBsYXlvdXRMb2FkZXIsIGpzb25Ub053dDtcbiAgdmFyIGN5LCBvcHRpb25zO1xuXG4gIGZ1bmN0aW9uIG1haW5VdGlsaXRpZXMgKHBhcmFtKSB7XG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAganNvblRvU2Jnbm1sID0gcGFyYW0uanNvblRvU2Jnbm1sQ29udmVydGVyO1xuICAgIGpzb25Ub053dCA9IHBhcmFtLmpzb25Ub053dENvbnZlcnRlcjtcbiAgICBzYmdubWxUb0pzb24gPSBwYXJhbS5zYmdubWxUb0pzb25Db252ZXJ0ZXI7XG4gICAgbnd0VG9Kc29uID0gcGFyYW0ubnd0VG9Kc29uQ29udmVydGVyO1xuICAgIHRkVG9Kc29uID0gcGFyYW0udGRUb0pzb25Db252ZXJ0ZXI7XG4gICAgc2lmVG9Kc29uID0gcGFyYW0uc2lmVG9Kc29uQ29udmVydGVyO1xuICAgIG9wdGlvblV0aWxpdGllcyA9IHBhcmFtLm9wdGlvblV0aWxpdGllcztcbiAgICBncmFwaFV0aWxpdGllcyA9IHBhcmFtLmdyYXBoVXRpbGl0aWVzO1xuICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgICBsYXlvdXRMb2FkZXIgPSBwYXJhbS5sYXlvdXRMb2FkZXI7XG4gICAgbGF5b3V0VG9UZXh0ID0gcGFyYW0ubGF5b3V0VG9UZXh0O1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG4gIH1cblxuICBtYWluVXRpbGl0aWVzLmJlZm9yZVBlcmZvcm1MYXlvdXQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyZW50cyA9IGN5Lm5vZGVzKCc6cGFyZW50Jyk7XG4gICAgdmFyIGVkZ2VzID0gY3kuZWRnZXMoKTtcblxuICAgIGN5LnN0YXJ0QmF0Y2goKTtcblxuICAgIC8vIGdyYXBoVXRpbGl0aWVzLmRpc2FibGVQb3J0cygpO1xuXG4gICAgLy8gVE9ETyBkbyB0aGlzIGJ5IHVzaW5nIGV4dGVuc2lvbiBBUElcbiAgICAvLyByZW1vdmVzIGFsbCBiZW5kcG9pbnRzIGZvciBhbGwgZWRnZXMgaW4gY3l0b3NjYXBlIGluc3RhbmNlXG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGVkZ2VzLmxlbmd0aDsgaSsrKXtcbiAgICAgIHZhciBlZGdlID0gZWRnZXNbaV07XG4gICAgICBlZGdlLnJlbW92ZUNsYXNzKCdlZGdlYmVuZGVkaXRpbmctaGFzYmVuZHBvaW50cycpO1xuICAgICAgZWRnZS5yZW1vdmVDbGFzcygnZWRnZWNvbnRyb2xlZGl0aW5nLWhhc2NvbnRyb2xwb2ludHMnKTtcbiAgICAgIGVkZ2UucmVtb3ZlQ2xhc3MoJ2VkZ2ViZW5kZWRpdGluZy1oYXNtdWx0aXBsZWJlbmRwb2ludHMnKTtcbiAgICAgIGVkZ2UucmVtb3ZlQ2xhc3MoJ2VkZ2Vjb250cm9sZWRpdGluZy1oYXNtdWx0aXBsZWNvbnRyb2xwb2ludHMnKTtcbiAgICAgIGVkZ2UuZGF0YSgnY3llZGdlYmVuZGVkaXRpbmdEaXN0YW5jZXMnLCBbXSk7XG4gICAgICBlZGdlLmRhdGEoJ2N5ZWRnZWJlbmRlZGl0aW5nV2VpZ2h0cycsIFtdKTtcbiAgICAgIGVkZ2UuZGF0YSgnY3llZGdlY29udHJvbGVkaXRpbmdEaXN0YW5jZXMnLCBbXSk7XHRcbiAgICAgIGVkZ2UuZGF0YSgnY3llZGdlY29udHJvbGVkaXRpbmdXZWlnaHRzJywgW10pO1xuICAgIH1cblxuICAgIHBhcmVudHMucmVtb3ZlRGF0YSgnbWluV2lkdGgnKTtcbiAgICBwYXJlbnRzLnJlbW92ZURhdGEoJ21pbkhlaWdodCcpO1xuICAgIHBhcmVudHMucmVtb3ZlRGF0YSgnbWluV2lkdGhCaWFzTGVmdCcpO1xuICAgIHBhcmVudHMucmVtb3ZlRGF0YSgnbWluV2lkdGhCaWFzUmlnaHQnKTtcbiAgICBwYXJlbnRzLnJlbW92ZURhdGEoJ21pbkhlaWdodEJpYXNUb3AnKTtcbiAgICBwYXJlbnRzLnJlbW92ZURhdGEoJ21pbkhlaWdodEJpYXNCb3R0b20nKTtcblxuICAgIGN5LmVuZEJhdGNoKCk7XG4gICAgXG4gICAgaWYocGFyZW50cy5sZW5ndGggPiAwKVxuICAgICAgY3kuc3R5bGUoKS51cGRhdGUoKTtcbiAgfTtcblxuICAvLyBFeHBhbmQgZ2l2ZW4gbm9kZXMuIFJlcXVpcmVzIGV4cGFuZENvbGxhcHNlIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5leHBhbmROb2RlcyA9IGZ1bmN0aW9uKG5vZGVzKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBleHBhbmRDb2xsYXBzZSBhcGlcbiAgICB2YXIgZXhwYW5kQ29sbGFwc2UgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XG5cbiAgICB2YXIgbm9kZXNUb0V4cGFuZCA9IGV4cGFuZENvbGxhcHNlLmV4cGFuZGFibGVOb2Rlcyhub2Rlcyk7XG4gICAgaWYgKG5vZGVzVG9FeHBhbmQubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImV4cGFuZFwiLCB7XG4gICAgICAgIG5vZGVzOiBub2Rlc1RvRXhwYW5kLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXhwYW5kQ29sbGFwc2UuZXhwYW5kKG5vZGVzKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gQ29sbGFwc2UgZ2l2ZW4gbm9kZXMuIFJlcXVpcmVzIGV4cGFuZENvbGxhcHNlIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5jb2xsYXBzZU5vZGVzID0gZnVuY3Rpb24obm9kZXMpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IGV4cGFuZENvbGxhcHNlIGFwaVxuICAgIHZhciBleHBhbmRDb2xsYXBzZSA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKTtcblxuICAgIGlmIChleHBhbmRDb2xsYXBzZS5jb2xsYXBzaWJsZU5vZGVzKG5vZGVzKS5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjb2xsYXBzZVwiLCB7XG4gICAgICAgIG5vZGVzOiBub2Rlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXhwYW5kQ29sbGFwc2UuY29sbGFwc2Uobm9kZXMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBDb2xsYXBzZSBhbGwgY29tcGxleGVzIHJlY3Vyc2l2ZWx5LiBSZXF1aXJlcyBleHBhbmRDb2xsYXBzZSBleHRlbnNpb24gYW5kIGNvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuY29sbGFwc2VDb21wbGV4ZXMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gR2V0IGV4cGFuZENvbGxhcHNlIGFwaVxuICAgIHZhciBleHBhbmRDb2xsYXBzZSA9IGN5LmV4cGFuZENvbGxhcHNlKCdnZXQnKTtcblxuICAgIHZhciBjb21wbGV4ZXMgPSBjeS5ub2RlcyhcIltjbGFzc149J2NvbXBsZXgnXVwiKTtcbiAgICBpZiAoZXhwYW5kQ29sbGFwc2UuY29sbGFwc2libGVOb2Rlcyhjb21wbGV4ZXMpLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJjb2xsYXBzZVJlY3Vyc2l2ZWx5XCIsIHtcbiAgICAgICAgbm9kZXM6IGNvbXBsZXhlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXhwYW5kQ29sbGFwc2UuY29sbGFwc2VSZWN1cnNpdmVseShjb21wbGV4ZXMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBFeHBhbmQgYWxsIGNvbXBsZXhlcyByZWN1cnNpdmVseS4gUmVxdWlyZXMgZXhwYW5kQ29sbGFwc2UgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLmV4cGFuZENvbXBsZXhlcyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICggZWxlbWVudFV0aWxpdGllcy5pc0dyYXBoVG9wb2xvZ3lMb2NrZWQoKSApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHZXQgZXhwYW5kQ29sbGFwc2UgYXBpXG4gICAgdmFyIGV4cGFuZENvbGxhcHNlID0gY3kuZXhwYW5kQ29sbGFwc2UoJ2dldCcpO1xuXG4gICAgdmFyIG5vZGVzID0gZXhwYW5kQ29sbGFwc2UuZXhwYW5kYWJsZU5vZGVzKGN5Lm5vZGVzKCkuZmlsdGVyKFwiW2NsYXNzXj0nY29tcGxleCddXCIpKTtcbiAgICBpZiAobm9kZXMubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImV4cGFuZFJlY3Vyc2l2ZWx5XCIsIHtcbiAgICAgICAgbm9kZXM6IG5vZGVzXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBleHBhbmRDb2xsYXBzZS5leHBhbmRSZWN1cnNpdmVseShub2Rlcyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENvbGxhcHNlIGFsbCBub2RlcyByZWN1cnNpdmVseS4gUmVxdWlyZXMgZXhwYW5kQ29sbGFwc2UgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgdW5kb2FibGUgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLmNvbGxhcHNlQWxsID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBleHBhbmRDb2xsYXBzZSBhcGlcbiAgICB2YXIgZXhwYW5kQ29sbGFwc2UgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XG5cbiAgICB2YXIgbm9kZXMgPSBjeS5ub2RlcygnOnZpc2libGUnKTtcbiAgICBpZiAoZXhwYW5kQ29sbGFwc2UuY29sbGFwc2libGVOb2Rlcyhub2RlcykubGVuZ3RoID09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImNvbGxhcHNlUmVjdXJzaXZlbHlcIiwge1xuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGV4cGFuZENvbGxhcHNlLmNvbGxhcHNlUmVjdXJzaXZlbHkobm9kZXMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBFeHBhbmQgYWxsIG5vZGVzIHJlY3Vyc2l2ZWx5LiBSZXF1aXJlcyBleHBhbmRDb2xsYXBzZSBleHRlbnNpb24gYW5kIGNvbnNpZGVycyB1bmRvYWJsZSBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuZXhwYW5kQWxsID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCBleHBhbmRDb2xsYXBzZSBhcGlcbiAgICB2YXIgZXhwYW5kQ29sbGFwc2UgPSBjeS5leHBhbmRDb2xsYXBzZSgnZ2V0Jyk7XG5cbiAgICB2YXIgbm9kZXMgPSBleHBhbmRDb2xsYXBzZS5leHBhbmRhYmxlTm9kZXMoY3kubm9kZXMoJzp2aXNpYmxlJykpO1xuICAgIGlmIChub2Rlcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiZXhwYW5kUmVjdXJzaXZlbHlcIiwge1xuICAgICAgICBub2Rlczogbm9kZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGV4cGFuZENvbGxhcHNlLmV4cGFuZFJlY3Vyc2l2ZWx5KG5vZGVzKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gSW5jcmVhc2UgYm9yZGVyIHdpZHRoIHRvIHNob3cgbm9kZXMgd2l0aCBoaWRkZW4gbmVpZ2hib3JzXG4gIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlciA9IGZ1bmN0aW9uKGVsZXMpe1xuICAgIGVsZXMuZm9yRWFjaChmdW5jdGlvbiggZWxlICl7XG4gICAgICB2YXIgZGVmYXVsdEJvcmRlcldpZHRoID0gTnVtYmVyKGVsZS5kYXRhKFwiYm9yZGVyLXdpZHRoXCIpKTtcbiAgICAgIGVsZS5kYXRhKFwiYm9yZGVyLXdpZHRoXCIsIGRlZmF1bHRCb3JkZXJXaWR0aCArIDIpO1xuICAgIH0pO1xuICAgIGVsZXMuZGF0YShcInRoaWNrQm9yZGVyXCIsIHRydWUpO1xuICAgIHJldHVybiBlbGVzO1xuICB9XG4gIC8vIERlY3JlYXNlIGJvcmRlciB3aWR0aCB3aGVuIGhpZGRlbiBuZWlnaGJvcnMgb2YgdGhlIG5vZGVzIGJlY29tZSB2aXNpYmxlXG4gIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlciA9IGZ1bmN0aW9uKGVsZXMpe1xuICAgIGVsZXMuZm9yRWFjaChmdW5jdGlvbiggZWxlICl7XG4gICAgICB2YXIgZGVmYXVsdEJvcmRlcldpZHRoID0gTnVtYmVyKGVsZS5kYXRhKFwiYm9yZGVyLXdpZHRoXCIpKTtcbiAgICAgIGVsZS5kYXRhKFwiYm9yZGVyLXdpZHRoXCIsIGRlZmF1bHRCb3JkZXJXaWR0aCAtIDIpO1xuICAgIH0pO1xuICAgIGVsZXMucmVtb3ZlRGF0YShcInRoaWNrQm9yZGVyXCIpO1xuICAgIHJldHVybiBlbGVzO1xuICB9XG5cbiAgbWFpblV0aWxpdGllcy5oaWRlRWxlc1NpbXBsZSA9IGZ1bmN0aW9uKGVsZXMpIHtcbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuXG4gICAgaWYgKGVsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy51bmRvYWJsZSkge1xuXG4gICAgICB2YXIgdXIgPSBjeS51bmRvUmVkbygpO1xuICAgICAgdXIuYWN0aW9uKFwidGhpY2tlbkJvcmRlclwiLCBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIsIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlcik7XG4gICAgICB1ci5hY3Rpb24oXCJ0aGluQm9yZGVyXCIsIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlciwgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyKTtcblxuICAgICAgLy8gQmF0Y2hpbmdcbiAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oZWxlcyk7XG4gICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwidGhpbkJvcmRlclwiLCBwYXJhbTogbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3J9KTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJoaWRlXCIsIHBhcmFtOiBlbGVzfSk7XG4gICAgICBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGVsZXMubmVpZ2hib3Job29kKFwiOnZpc2libGVcIilcbiAgICAgICAgICAgICAgLm5vZGVzKCkuZGlmZmVyZW5jZShlbGVzKS5kaWZmZXJlbmNlKGN5Lm5vZGVzKFwiW3RoaWNrQm9yZGVyXVwiKSk7XG4gICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwidGhpY2tlbkJvcmRlclwiLCBwYXJhbTogbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3J9KTtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJiYXRjaFwiLCBhY3Rpb25zKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgICAgdmlld1V0aWxpdGllcy5oaWRlKGVsZXMpO1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyBFeHRlbmRzIHRoZSBnaXZlbiBub2RlcyBsaXN0IGluIGEgc21hcnQgd2F5IHRvIGxlYXZlIHRoZSBtYXAgaW50YWN0IGFuZCBoaWRlcyB0aGUgcmVzdWx0aW5nIGxpc3QuXG4gIC8vIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuaGlkZU5vZGVzU21hcnQgPSBmdW5jdGlvbihfbm9kZXMpIHtcbiAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB3ZSBjYW4gYXNzdW1lIHRoYXQgdmlldyB1dGlsaXRpZXMgZXh0ZW5zaW9uIGlzIG9uIHVzZVxuICAgIHZhciB2aWV3VXRpbGl0aWVzID0gY3kudmlld1V0aWxpdGllcygnZ2V0Jyk7XG4gICAgdmFyIG5vZGVzID0gX25vZGVzLm5vZGVzKCk7IC8vIEVuc3VyZSB0aGF0IG5vZGVzIGxpc3QganVzdCBpbmNsdWRlIG5vZGVzXG5cbiAgICB2YXIgYWxsTm9kZXMgPSBjeS5ub2RlcyhcIjp2aXNpYmxlXCIpO1xuICAgIHZhciBub2Rlc1RvU2hvdyA9IGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kUmVtYWluaW5nTm9kZXMobm9kZXMsIGFsbE5vZGVzKTtcbiAgICB2YXIgbm9kZXNUb0hpZGUgPSBhbGxOb2Rlcy5ub3Qobm9kZXNUb1Nob3cpO1xuXG4gICAgaWYgKG5vZGVzVG9IaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMudW5kb2FibGUpIHtcblxuICAgICAgdmFyIHVyID0gY3kudW5kb1JlZG8oKTtcbiAgICAgIHVyLmFjdGlvbihcInRoaWNrZW5Cb3JkZXJcIiwgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyLCBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIpO1xuICAgICAgdXIuYWN0aW9uKFwidGhpbkJvcmRlclwiLCBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIsIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlcik7XG5cbiAgICAgIC8vIEJhdGNoaW5nXG4gICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCkuaW50ZXJzZWN0aW9uKG5vZGVzVG9IaWRlKTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGluQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcn0pO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcImhpZGVcIiwgcGFyYW06IG5vZGVzVG9IaWRlfSk7XG4gICAgICBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IG5vZGVzVG9IaWRlLm5laWdoYm9yaG9vZChcIjp2aXNpYmxlXCIpXG4gICAgICAgICAgICAgIC5ub2RlcygpLmRpZmZlcmVuY2Uobm9kZXNUb0hpZGUpLmRpZmZlcmVuY2UoY3kubm9kZXMoXCJbdGhpY2tCb3JkZXJdXCIpKTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGlja2VuQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcn0pO1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImJhdGNoXCIsIGFjdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlcihub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcik7XG4gICAgICB2aWV3VXRpbGl0aWVzLmhpZGUobm9kZXNUb0hpZGUpO1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gRXh0ZW5kcyB0aGUgZ2l2ZW4gbm9kZXMgbGlzdCBpbiBhIHNtYXJ0IHdheSB0byBsZWF2ZSB0aGUgbWFwIGludGFjdC5cbiAgLy8gVGhlbiB1bmhpZGVzIHRoZSByZXN1bHRpbmcgbGlzdCBhbmQgaGlkZXMgb3RoZXJzLiBSZXF1aXJlcyB2aWV3VXRpbGl0aWVzIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzICd1bmRvYWJsZScgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLnNob3dOb2Rlc1NtYXJ0ID0gZnVuY3Rpb24oX25vZGVzKSB7XG4gICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2UgY2FuIGFzc3VtZSB0aGF0IHZpZXcgdXRpbGl0aWVzIGV4dGVuc2lvbiBpcyBvbiB1c2VcbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuICAgIHZhciBub2RlcyA9IF9ub2Rlcy5ub2RlcygpOyAvLyBFbnN1cmUgdGhhdCBub2RlcyBsaXN0IGp1c3QgaW5jbHVkZSBub2Rlc1xuXG4gICAgdmFyIGFsbE5vZGVzID0gY3kuZWxlbWVudHMoKTtcbiAgICB2YXIgbm9kZXNUb1Nob3cgPSBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZE5vZGVMaXN0KG5vZGVzKTtcbiAgICB2YXIgbm9kZXNUb0hpZGUgPSBhbGxOb2Rlcy5ub3Qobm9kZXNUb1Nob3cpO1xuXG4gICAgaWYgKG5vZGVzVG9IaWRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIHZhciB1ciA9IGN5LnVuZG9SZWRvKCk7XG4gICAgICB1ci5hY3Rpb24oXCJ0aGlja2VuQm9yZGVyXCIsIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlciwgbWFpblV0aWxpdGllcy50aGluQm9yZGVyKTtcbiAgICAgIHVyLmFjdGlvbihcInRoaW5Cb3JkZXJcIiwgbWFpblV0aWxpdGllcy50aGluQm9yZGVyLCBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIpO1xuXG4gICAgICAvLyBCYXRjaGluZ1xuICAgICAgdmFyIGFjdGlvbnMgPSBbXTtcbiAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgIGFjdGlvbnMucHVzaCh7bmFtZTogXCJ0aGluQm9yZGVyXCIsIHBhcmFtOiBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcn0pO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcImhpZGVcIiwgcGFyYW06IG5vZGVzVG9IaWRlfSk7XG4gICAgICBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IG5vZGVzVG9IaWRlLm5laWdoYm9yaG9vZChcIjp2aXNpYmxlXCIpXG4gICAgICAgICAgICAgIC5ub2RlcygpLmRpZmZlcmVuY2Uobm9kZXNUb0hpZGUpO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaWNrZW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yfSk7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiYmF0Y2hcIiwgYWN0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgbWFpblV0aWxpdGllcy50aGluQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICAgIHZpZXdVdGlsaXRpZXMuaGlkZShub2Rlc1RvSGlkZSk7XG4gICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIobm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IpO1xuICAgIH1cbiAgfTtcblxuICAvLyBVbmhpZGVzIGVsZW1lbnRzIHBhc3NlZCBhcyBhcmd1bWVudHMuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuc2hvd0VsZXMgPSBmdW5jdGlvbihlbGVzKSB7XG4gICAgICAvLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCB3ZSBjYW4gYXNzdW1lIHRoYXQgdmlldyB1dGlsaXRpZXMgZXh0ZW5zaW9uIGlzIG9uIHVzZVxuICAgICAgdmFyIHZpZXdVdGlsaXRpZXMgPSBjeS52aWV3VXRpbGl0aWVzKCdnZXQnKTtcbiAgICAgIHZhciBoaWRkZW5FbGVzID0gZWxlcy5maWx0ZXIoJzpoaWRkZW4nKTtcbiAgICAgIGlmIChoaWRkZW5FbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgICAgICB2YXIgdXIgPSBjeS51bmRvUmVkbygpO1xuICAgICAgICAgIHVyLmFjdGlvbihcInRoaWNrZW5Cb3JkZXJcIiwgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyLCBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIpO1xuICAgICAgICAgIHVyLmFjdGlvbihcInRoaW5Cb3JkZXJcIiwgbWFpblV0aWxpdGllcy50aGluQm9yZGVyLCBtYWluVXRpbGl0aWVzLnRoaWNrZW5Cb3JkZXIpO1xuXG4gICAgICAgICAgLy8gQmF0Y2hpbmdcbiAgICAgICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgICAgIHZhciBub2Rlc1RvVGhpbkJvcmRlciA9IChoaWRkZW5FbGVzLm5laWdoYm9yaG9vZChcIjp2aXNpYmxlXCIpLm5vZGVzKFwiW3RoaWNrQm9yZGVyXVwiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZGlmZmVyZW5jZShjeS5lZGdlcyhcIjpoaWRkZW5cIikuZGlmZmVyZW5jZShoaWRkZW5FbGVzLmVkZ2VzKCkudW5pb24oaGlkZGVuRWxlcy5ub2RlcygpLmNvbm5lY3RlZEVkZ2VzKCkpKS5jb25uZWN0ZWROb2RlcygpKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwidGhpbkJvcmRlclwiLCBwYXJhbTogbm9kZXNUb1RoaW5Cb3JkZXJ9KTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwic2hvd1wiLCBwYXJhbTogaGlkZGVuRWxlc30pO1xuICAgICAgICAgIHZhciBub2Rlc1RvVGhpY2tlbkJvcmRlciA9IGhpZGRlbkVsZXMubm9kZXMoKS5lZGdlc1dpdGgoY3kubm9kZXMoXCI6aGlkZGVuXCIpLmRpZmZlcmVuY2UoaGlkZGVuRWxlcy5ub2RlcygpKSlcbiAgXHQgICAgICAgICAgICAuY29ubmVjdGVkTm9kZXMoKS5pbnRlcnNlY3Rpb24oaGlkZGVuRWxlcy5ub2RlcygpKTtcbiAgICAgICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwidGhpY2tlbkJvcmRlclwiLCBwYXJhbTogbm9kZXNUb1RoaWNrZW5Cb3JkZXJ9KTtcbiAgICAgICAgICBjeS51bmRvUmVkbygpLmRvKFwiYmF0Y2hcIiwgYWN0aW9ucyk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgICB2YXIgbm9kZXNXaXRoSGlkZGVuTmVpZ2hib3IgPSBjeS5lZGdlcyhcIjpoaWRkZW5cIikuY29ubmVjdGVkTm9kZXMoJzp2aXNpYmxlJyk7XG4gICAgICAgICAgbWFpblV0aWxpdGllcy50aGluQm9yZGVyKG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yKTtcbiAgICAgICAgICB2aWV3VXRpbGl0aWVzLnNob3coZWxlcyk7XG4gICAgICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kuZWRnZXMoXCI6aGlkZGVuXCIpLmNvbm5lY3RlZE5vZGVzKCc6dmlzaWJsZScpO1xuICAgICAgICAgIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlcihub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcik7XG4gICAgICB9XG4gIH07XG5cbiAgLy8gVW5oaWRlcyBhbGwgZWxlbWVudHMuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuc2hvd0FsbCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIHdlIGNhbiBhc3N1bWUgdGhhdCB2aWV3IHV0aWxpdGllcyBleHRlbnNpb24gaXMgb24gdXNlXG4gICAgdmFyIHZpZXdVdGlsaXRpZXMgPSBjeS52aWV3VXRpbGl0aWVzKCdnZXQnKTtcblxuICAgIGlmIChjeS5lbGVtZW50cygpLmxlbmd0aCA9PT0gY3kuZWxlbWVudHMoJzp2aXNpYmxlJykubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgdmFyIHVyID0gY3kudW5kb1JlZG8oKTtcbiAgICAgIHVyLmFjdGlvbihcInRoaWNrZW5Cb3JkZXJcIiwgbWFpblV0aWxpdGllcy50aGlja2VuQm9yZGVyLCBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIpO1xuICAgICAgdXIuYWN0aW9uKFwidGhpbkJvcmRlclwiLCBtYWluVXRpbGl0aWVzLnRoaW5Cb3JkZXIsIG1haW5VdGlsaXRpZXMudGhpY2tlbkJvcmRlcik7XG5cbiAgICAgIC8vIEJhdGNoaW5nXG4gICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgdmFyIG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yID0gY3kubm9kZXMoXCJbdGhpY2tCb3JkZXJdXCIpO1xuICAgICAgYWN0aW9ucy5wdXNoKHtuYW1lOiBcInRoaW5Cb3JkZXJcIiwgcGFyYW06IG5vZGVzV2l0aEhpZGRlbk5laWdoYm9yfSk7XG4gICAgICBhY3Rpb25zLnB1c2goe25hbWU6IFwic2hvd1wiLCBwYXJhbTogY3kuZWxlbWVudHMoKX0pO1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImJhdGNoXCIsIGFjdGlvbnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBub2Rlc1dpdGhIaWRkZW5OZWlnaGJvciA9IGN5LmVkZ2VzKFwiOmhpZGRlblwiKS5jb25uZWN0ZWROb2RlcygnOnZpc2libGUnKTtcbiAgICAgIG1haW5VdGlsaXRpZXMudGhpbkJvcmRlcihub2Rlc1dpdGhIaWRkZW5OZWlnaGJvcik7XG4gICAgICB2aWV3VXRpbGl0aWVzLnNob3coY3kuZWxlbWVudHMoKSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFJlbW92ZXMgdGhlIGdpdmVuIGVsZW1lbnRzIGluIGEgc2ltcGxlIHdheS4gQ29uc2lkZXJzICd1bmRvYWJsZScgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLmRlbGV0ZUVsZXNTaW1wbGUgPSBmdW5jdGlvbihlbGVzKSB7XG4gICAgaWYgKGVsZW1lbnRVdGlsaXRpZXMuaXNHcmFwaFRvcG9sb2d5TG9ja2VkKCkgfHwgZWxlcy5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKFwiZGVsZXRlRWxlc1NpbXBsZVwiLCB7XG4gICAgICAgIGVsZXM6IGVsZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGVsZXMucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIC8vIEV4dGVuZHMgdGhlIGdpdmVuIG5vZGVzIGxpc3QgaW4gYSBzbWFydCB3YXkgdG8gbGVhdmUgdGhlIG1hcCBpbnRhY3QgYW5kIHJlbW92ZXMgdGhlIHJlc3VsdGluZyBsaXN0LlxuICAvLyBDb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuZGVsZXRlTm9kZXNTbWFydCA9IGZ1bmN0aW9uKF9ub2Rlcykge1xuICAgIHZhciBub2RlcyA9IF9ub2Rlcy5ub2RlcygpO1xuICAgIGlmIChlbGVtZW50VXRpbGl0aWVzLmlzR3JhcGhUb3BvbG9neUxvY2tlZCgpIHx8IG5vZGVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYob3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcImRlbGV0ZU5vZGVzU21hcnRcIiwge1xuICAgICAgICBmaXJzdFRpbWU6IHRydWUsXG4gICAgICAgIGVsZXM6IG5vZGVzXG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzLmRlbGV0ZU5vZGVzU21hcnQobm9kZXMpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBpc05lZWQySGlnaGxpZ3RoKGVsZXMyaGlnaGxpZ3RoKSB7XG4gICAgaWYgKGVsZXMyaGlnaGxpZ3RoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuICAgIHZhciBoaWdobGlnaHRDbGFzcyA9IHZpZXdVdGlsaXRpZXMuZ2V0QWxsSGlnaGxpZ2h0Q2xhc3NlcygpWzBdO1xuICAgIHZhciBoaWdobGlnaHRlZEVsZXMgPSBjeS5lbGVtZW50cygnLicgKyBoaWdobGlnaHRDbGFzcykuZmlsdGVyKCc6dmlzaWJsZScpO1xuICAgIGlmIChoaWdobGlnaHRlZEVsZXMuY29udGFpbnMoZWxlczJoaWdobGlndGgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gSGlnaGxpZ2h0cyBzZWxlY3RlZCBlbGVtZW50cy4gUmVxdWlyZXMgdmlld1V0aWxpdGllcyBleHRlbnNpb24gYW5kIGNvbnNpZGVycyAndW5kb2FibGUnIG9wdGlvbi5cbiAgbWFpblV0aWxpdGllcy5oaWdobGlnaHRTZWxlY3RlZCA9IGZ1bmN0aW9uIChfZWxlcykge1xuXG4gICAgdmFyIGVsZXNUb0hpZ2hsaWdodCA9IF9lbGVzO1xuICAgIGlmICghaXNOZWVkMkhpZ2hsaWd0aChlbGVzVG9IaWdobGlnaHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2UgY2FuIGFzc3VtZSB0aGF0IHZpZXcgdXRpbGl0aWVzIGV4dGVuc2lvbiBpcyBvbiB1c2VcbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKCdoaWdobGlnaHQnLCB7IGVsZXM6IGVsZXNUb0hpZ2hsaWdodCwgaWR4OiAwIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZpZXdVdGlsaXRpZXMuaGlnaGxpZ2h0KGVsZXNUb0hpZ2hsaWdodCk7XG4gICAgfVxuXG4gICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICB9O1xuXG4gIC8vIEhpZ2hsaWdodHMgbmVpZ2hib3VycyBvZiB0aGUgZ2l2ZW4gbm9kZXMuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuaGlnaGxpZ2h0TmVpZ2hib3VycyA9IGZ1bmN0aW9uKF9ub2Rlcykge1xuICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIHdlIGNhbiBhc3N1bWUgdGhhdCB2aWV3IHV0aWxpdGllcyBleHRlbnNpb24gaXMgb24gdXNlXG4gICAgdmFyIHZpZXdVdGlsaXRpZXMgPSBjeS52aWV3VXRpbGl0aWVzKCdnZXQnKTtcblxuICAgIHZhciBub2RlcyA9IF9ub2Rlcy5ub2RlcygpOyAvLyBFbnN1cmUgdGhhdCBub2RlcyBsaXN0IGp1c3QgaW5jbHVkZSBub2Rlc1xuICAgIHZhciBlbGVzVG9IaWdobGlnaHQgPSBlbGVtZW50VXRpbGl0aWVzLmdldE5laWdoYm91cnNPZk5vZGVzKG5vZGVzKTtcbiAgICBpZiAoIWlzTmVlZDJIaWdobGlndGgoZWxlc1RvSGlnaGxpZ2h0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnVuZG9hYmxlKSB7XG4gICAgICBjeS51bmRvUmVkbygpLmRvKCdoaWdobGlnaHQnLCB7IGVsZXM6IGVsZXNUb0hpZ2hsaWdodCwgaWR4OiAwIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZpZXdVdGlsaXRpZXMuaGlnaGxpZ2h0KGVsZXNUb0hpZ2hsaWdodCk7XG4gICAgfVxuXG4gICAgY3kuZWxlbWVudHMoKS51bnNlbGVjdCgpO1xuICB9O1xuXG4gIC8vIEZpbmRzIHRoZSBlbGVtZW50cyB3aG9zZSBsYWJlbCBpbmNsdWRlcyB0aGUgZ2l2ZW4gbGFiZWwgYW5kIGhpZ2hsaWdodHMgcHJvY2Vzc2VzIG9mIHRob3NlIGVsZW1lbnRzLlxuICAvLyBSZXF1aXJlcyB2aWV3VXRpbGl0aWVzIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzICd1bmRvYWJsZScgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLnNlYXJjaEJ5TGFiZWwgPSBmdW5jdGlvbihsYWJlbCkge1xuICAgIGlmIChsYWJlbC5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub2Rlc1RvSGlnaGxpZ2h0ID0gY3kubm9kZXMoXCI6dmlzaWJsZVwiKS5maWx0ZXIoZnVuY3Rpb24gKGVsZSwgaSkge1xuICAgICAgaWYodHlwZW9mIGVsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBlbGUgPSBpO1xuICAgICAgfVxuICAgICAgaWYgKGVsZS5kYXRhKFwibGFiZWxcIikgJiYgZWxlLmRhdGEoXCJsYWJlbFwiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YobGFiZWwpID49IDApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpZiAobm9kZXNUb0hpZ2hsaWdodC5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIHdlIGNhbiBhc3N1bWUgdGhhdCB2aWV3IHV0aWxpdGllcyBleHRlbnNpb24gaXMgb24gdXNlXG4gICAgdmFyIHZpZXdVdGlsaXRpZXMgPSBjeS52aWV3VXRpbGl0aWVzKCdnZXQnKTtcblxuICAgIC8vIFVzZSB0aGlzIGxpbmUgZm9yIHNtYXJ0IHNlYXJjaFxuICAgIC8vIG5vZGVzVG9IaWdobGlnaHQgPSBlbGVtZW50VXRpbGl0aWVzLmV4dGVuZE5vZGVMaXN0KG5vZGVzVG9IaWdobGlnaHQpO1xuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oJ2hpZ2hsaWdodCcsIHsgZWxlczogbm9kZXNUb0hpZ2hsaWdodCwgaWR4OiAwIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZpZXdVdGlsaXRpZXMuaGlnaGxpZ2h0KG5vZGVzVG9IaWdobGlnaHQpO1xuICAgIH1cblxuICAgIGN5LmVsZW1lbnRzKCkudW5zZWxlY3QoKTtcbiAgfTtcblxuICAvLyBIaWdobGlnaHRzIHByb2Nlc3NlcyBvZiB0aGUgZ2l2ZW4gbm9kZXMuIFJlcXVpcmVzIHZpZXdVdGlsaXRpZXMgZXh0ZW5zaW9uIGFuZCBjb25zaWRlcnMgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMuaGlnaGxpZ2h0UHJvY2Vzc2VzID0gZnVuY3Rpb24oX25vZGVzKSB7XG4gICAgdmFyIG5vZGVzID0gX25vZGVzLm5vZGVzKCk7IC8vIEVuc3VyZSB0aGF0IG5vZGVzIGxpc3QganVzdCBpbmNsdWRlIG5vZGVzXG4gICAgdmFyIGVsZXNUb0hpZ2hsaWdodCA9IGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kTm9kZUxpc3Qobm9kZXMpO1xuICAgIGlmICghaXNOZWVkMkhpZ2hsaWd0aChlbGVzVG9IaWdobGlnaHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2UgY2FuIGFzc3VtZSB0aGF0IHZpZXcgdXRpbGl0aWVzIGV4dGVuc2lvbiBpcyBvbiB1c2VcbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oJ2hpZ2hsaWdodCcsIHsgZWxlczogZWxlc1RvSGlnaGxpZ2h0LCBpZHg6IDAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdmlld1V0aWxpdGllcy5oaWdobGlnaHQoZWxlc1RvSGlnaGxpZ2h0KTtcbiAgICB9XG5cbiAgICBjeS5lbGVtZW50cygpLnVuc2VsZWN0KCk7XG4gIH07XG5cbiAgLy8gVW5oaWdobGlnaHRzIGFueSBoaWdobGlnaHRlZCBlbGVtZW50LiBSZXF1aXJlcyB2aWV3VXRpbGl0aWVzIGV4dGVuc2lvbiBhbmQgY29uc2lkZXJzICd1bmRvYWJsZScgb3B0aW9uLlxuICBtYWluVXRpbGl0aWVzLnJlbW92ZUhpZ2hsaWdodHMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoZWxlbWVudFV0aWxpdGllcy5ub25lSXNOb3RIaWdobGlnaHRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgd2UgY2FuIGFzc3VtZSB0aGF0IHZpZXcgdXRpbGl0aWVzIGV4dGVuc2lvbiBpcyBvbiB1c2VcbiAgICB2YXIgdmlld1V0aWxpdGllcyA9IGN5LnZpZXdVdGlsaXRpZXMoJ2dldCcpO1xuXG4gICAgaWYgKG9wdGlvbnMudW5kb2FibGUpIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJyZW1vdmVIaWdobGlnaHRzXCIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZpZXdVdGlsaXRpZXMucmVtb3ZlSGlnaGxpZ2h0cygpO1xuICAgIH1cbiAgICBjeS5zdHlsZSgpLnVwZGF0ZSgpO1xuICB9O1xuXG4gIG1haW5VdGlsaXRpZXMubG9hZExheW91dERhdGEgPSBmdW5jdGlvbihsYXlvdXRUZXh0LCBieU5hbWUpIHtcbiAgICBsYXlvdXRMb2FkZXIubG9hZCggbGF5b3V0VGV4dCwgYnlOYW1lICk7XG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5nZXRMYXlvdXRUZXh0ID0gZnVuY3Rpb24oIGJ5TmFtZSApIHtcbiAgICBsYXlvdXRUb1RleHQuY29udmVydCggYnlOYW1lICk7XG4gIH07XG5cbiAgLy8gUGVyZm9ybXMgbGF5b3V0IGJ5IGdpdmVuIGxheW91dE9wdGlvbnMuIENvbnNpZGVycyAndW5kb2FibGUnIG9wdGlvbi4gSG93ZXZlciwgYnkgc2V0dGluZyBub3RVbmRvYWJsZSBwYXJhbWV0ZXJcbiAgLy8gdG8gYSB0cnV0aHkgdmFsdWUgeW91IGNhbiBmb3JjZSBhbiB1bmRhYmxlIGxheW91dCBvcGVyYXRpb24gaW5kZXBlbmRhbnQgb2YgJ3VuZG9hYmxlJyBvcHRpb24uXG4gIG1haW5VdGlsaXRpZXMucGVyZm9ybUxheW91dCA9IGZ1bmN0aW9uKGxheW91dE9wdGlvbnMsIG5vdFVuZG9hYmxlKSB7XG4gICAgXG4gICAgaWYgKCFvcHRpb25zLnVuZG9hYmxlIHx8IG5vdFVuZG9hYmxlKSB7IC8vICdub3RVbmRvYWJsZScgZmxhZyBjYW4gYmUgdXNlZCB0byBoYXZlIGNvbXBvc2l0ZSBhY3Rpb25zIGluIHVuZG8vcmVkbyBzdGFja1xuICAgICAgLy8gVGhpbmdzIHRvIGRvIGJlZm9yZSBwZXJmb3JtaW5nIGxheW91dFxuICAgICAgbWFpblV0aWxpdGllcy5iZWZvcmVQZXJmb3JtTGF5b3V0KCk7XG4gICAgICBcbiAgICAgIHZhciBsYXlvdXQgPSBjeS5lbGVtZW50cygpLmZpbHRlcignOnZpc2libGUnKS5sYXlvdXQobGF5b3V0T3B0aW9ucyk7XG5cbiAgICAgIC8vIENoZWNrIHRoaXMgZm9yIGN5dG9zY2FwZS5qcyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICBpZiAobGF5b3V0ICYmIGxheW91dC5ydW4pIHtcbiAgICAgICAgbGF5b3V0LnJ1bigpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGN5LnVuZG9SZWRvKCkuZG8oXCJsYXlvdXRcIiwge1xuICAgICAgICBvcHRpb25zOiBsYXlvdXRPcHRpb25zLFxuICAgICAgICBlbGVzOiBjeS5lbGVtZW50cygpLmZpbHRlcignOnZpc2libGUnKVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENyZWF0ZXMgYW4gc2Jnbm1sIGZpbGUgY29udGVudCBmcm9tIHRoZSBleGlzaW5nIGdyYXBoIGFuZCByZXR1cm5zIGl0LlxuICBtYWluVXRpbGl0aWVzLmNyZWF0ZVNiZ25tbCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBqc29uVG9TYmdubWwuY3JlYXRlU2Jnbm1sKCk7XG4gIH07XG5cbiAgbWFpblV0aWxpdGllcy5jcmVhdGVOd3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4ganNvblRvTnd0LmNyZWF0ZVNiZ25tbCgpO1xuICB9O1xuXG4gIC8vIENvbnZlcnRzIGdpdmVuIHNiZ25tbCBkYXRhIHRvIGEganNvbiBvYmplY3QgaW4gYSBzcGVjaWFsIGZvcm1hdFxuICAvLyAoaHR0cDovL2pzLmN5dG9zY2FwZS5vcmcvI25vdGF0aW9uL2VsZW1lbnRzLWpzb24pIGFuZCByZXR1cm5zIGl0LlxuICBtYWluVXRpbGl0aWVzLmNvbnZlcnRTYmdubWxUb0pzb24gPSBmdW5jdGlvbihkYXRhLCB1cmxQYXJhbXMpIHtcbiAgICByZXR1cm4gc2Jnbm1sVG9Kc29uLmNvbnZlcnQoZGF0YSwgdXJsUGFyYW1zKTtcbiAgfTtcblxuICBtYWluVXRpbGl0aWVzLmNvbnZlcnROd3RUb0pzb24gPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgcmV0dXJuIG53dFRvSnNvbi5jb252ZXJ0KGRhdGEpO1xuICB9O1xuXG5cbiAgLy8gQ3JlYXRlIHRoZSBxdGlwIGNvbnRlbnRzIG9mIHRoZSBnaXZlbiBub2RlIGFuZCByZXR1cm5zIGl0LlxuICBtYWluVXRpbGl0aWVzLmdldFF0aXBDb250ZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmdldFF0aXBDb250ZW50KG5vZGUpO1xuICB9O1xuXG4gIC8vIENoYW5nZSBvcHRpb25cbiAgbWFpblV0aWxpdGllcy5zZXRTaG93Q29tcGxleE5hbWUgPSBmdW5jdGlvbihzaG93Q29tcGxleE5hbWUpIHtcbiAgICBvcHRpb25zLnNob3dDb21wbGV4TmFtZSA9IHNob3dDb21wbGV4TmFtZTtcbiAgICAvLyBtYWtlIGNoYW5nZSBhY3RpdmUgYnkgdHJpZ2dlcmluZyBkYXRhIHdoaWNoIHdpbGwgdHJpZ2dlciBzdHlsZSB1cGRhdGVcbiAgICBjeS5ub2RlcygnW2NsYXNzXj1cImNvbXBsZXhcIl0nKS5mb3JFYWNoKGZ1bmN0aW9uKGVsZSl7XG4gICAgICBlbGUudHJpZ2dlcihcImRhdGFcIik7XG4gICAgfSk7XG4gIH07XG5cbiAgLypcbiAgICogU2V0cyB0aGUgb3JkZXJpbmcgb2YgdGhlIGdpdmVuIG5vZGVzLlxuICAgKiBPcmRlcmluZyBvcHRpb25zIGFyZSAnTC10by1SJywgJ1ItdG8tTCcsICdULXRvLUInLCAnQi10by1UJywgJ25vbmUnLlxuICAgKiBJZiBhIG5vZGUgZG9lcyBub3QgaGF2ZSBhbnkgcG9ydCBiZWZvcmUgdGhlIG9wZXJhdGlvbiBhbmQgaXQgaXMgc3VwcG9zZWQgdG8gaGF2ZSBzb21lIGFmdGVyIG9wZXJhdGlvbiB0aGUgcG9ydERpc3RhbmNlIHBhcmFtZXRlciBpc1xuICAgKiB1c2VkIHRvIHNldCB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbm9kZSBjZW50ZXIgYW5kIHRoZSBwb3J0cy4gVGhlIGRlZmF1bHQgcG9ydCBkaXN0YW5jZSBpcyA2MC5cbiAgICogQ29uc2lkZXJzIHVuZG9hYmxlIG9wdGlvbi5cbiAgICovXG4gIG1haW5VdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyA9IGZ1bmN0aW9uIChub2Rlcywgb3JkZXJpbmcsIHBvcnREaXN0YW5jZSkge1xuICAgIGlmICggbm9kZXMubGVuZ3RoID09PSAwICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy51bmRvYWJsZSkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5zZXRQb3J0c09yZGVyaW5nKG5vZGVzLCBvcmRlcmluZywgcG9ydERpc3RhbmNlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgcGFyYW0gPSB7XG4gICAgICAgIG5vZGVzOiBub2RlcyxcbiAgICAgICAgb3JkZXJpbmc6IG9yZGVyaW5nLFxuICAgICAgICBwb3J0RGlzdGFuY2U6IHBvcnREaXN0YW5jZVxuICAgICAgfTtcblxuICAgICAgY3kudW5kb1JlZG8oKS5kbyhcInNldFBvcnRzT3JkZXJpbmdcIiwgcGFyYW0pO1xuICAgIH1cblxuICAgIGN5LnN0eWxlKCkudXBkYXRlKCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCBtYXAgcHJvcGVydGllcyBmcm9tIFNCR05NTCBmaWxlXG4gICAqIE5lZWRzIHRvIGJlIGNhbGxlZCBhZnRlciBmaWxlIGlzIGxvYWRlZCAtIHNiZ252aXpMb2FkRmlsZUVuZCBldmVudFxuICAgKiByZXR1cm46IG1hcCBwcm9wZXJ0aWVzIGFzIG9iamVjdFxuICAgKi9cbm1haW5VdGlsaXRpZXMuZ2V0TWFwUHJvcGVydGllcyA9IGZ1bmN0aW9uKCkge1xuICBpZiggZWxlbWVudFV0aWxpdGllcy5maWxlRm9ybWF0ICE9PSB1bmRlZmluZWQpe1xuICAgIGlmKCBlbGVtZW50VXRpbGl0aWVzLmZpbGVGb3JtYXQgPT0gJ3NiZ25tbCcpXG4gICAgICByZXR1cm4gc2Jnbm1sVG9Kc29uLm1hcFByb3BlcnRpZXNUb09iaigpO1xuICAgIGVsc2UgaWYoIGVsZW1lbnRVdGlsaXRpZXMuZmlsZUZvcm1hdCA9PSAnbnd0JyApXG4gICAgICByZXR1cm4gbnd0VG9Kc29uLm1hcFByb3BlcnRpZXNUb09iaigpO1xuICAgIGVsc2UgaWYoIGVsZW1lbnRVdGlsaXRpZXMuZmlsZUZvcm1hdCA9PSAndGQnKVxuICAgICAgcmV0dXJuIHRkVG9Kc29uLm1hcFByb3BlcnRpZXNUb09iaigpO1xuICAgIGVsc2UgaWYoIGVsZW1lbnRVdGlsaXRpZXMuZmlsZUZvcm1hdCA9PSAnc2lmJyApXG4gICAgICByZXR1cm4gc2lmVG9Kc29uLm1hcFByb3BlcnRpZXNUb09iaigpO1xuICAgIGVsc2V7XG4gICAgICBjb25zb2xlLmxvZyggXCJGaWxlIGZvcm1hdCBtaXNtYXRjaGVkIVwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9ZWxzZXtcbiAgICBjb25zb2xlLmxvZyggXCJGaWxlIGZvcm1hdCBpcyBub3QgZGVmaW5lZCFcIilcbiAgICByZXR1cm47XG4gIH1cbiB9O1xuICBtYWluVXRpbGl0aWVzLmRvVmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGZpbGUpIHtcbiAgICByZXR1cm4gc2Jnbm1sVG9Kc29uLmRvVmFsaWRhdGlvbihmaWxlKTtcbiAgfVxuXG4gIG1haW5VdGlsaXRpZXMuc2V0Q29tcG91bmRQYWRkaW5nID0gZnVuY3Rpb24obmV3UGFkZGluZ1ZhbHVlKSB7XG4gICAgb3B0aW9ucy5jb21wb3VuZFBhZGRpbmcgPSBuZXdQYWRkaW5nVmFsdWU7XG4gICAgb3B0aW9uVXRpbGl0aWVzLmV4dGVuZE9wdGlvbnMob3B0aW9ucyk7ICAgIFxuICB9XG5cbiAgbWFpblV0aWxpdGllcy5nZXRDb21wb3VuZFBhZGRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5jb21wb3VuZFBhZGRpbmc7XG4gIH1cbiAgIHJldHVybiBtYWluVXRpbGl0aWVzO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG5cbiAgdmFyIHNiZ25tbFRvSnNvbiwgZWxlbWVudFV0aWxpdGllcztcblxuICBmdW5jdGlvbiBud3RUb0pzb24ocGFyYW0pIHtcbiAgICBzYmdubWxUb0pzb24gPSBwYXJhbS5zYmdubWxUb0pzb25Db252ZXJ0ZXI7XG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gIH1cblxuICBmdW5jdGlvbiBzdHJUb1NldCggc3RyLCBzcGxpdEJ5ICkge1xuICAgIHZhciBzZXQgPSB7fTtcbiAgICB2YXIgbGlzdCA9IHN0ciA/IHN0ci5zcGxpdCggc3BsaXRCeSApIDogW107XG5cbiAgICBsaXN0LmZvckVhY2goIGZ1bmN0aW9uKCBtZW1iZXIgKSB7XG4gICAgICBzZXRbIG1lbWJlciBdID0gdHJ1ZTtcbiAgICB9ICk7XG5cbiAgICByZXR1cm4gc2V0O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Rmlyc3RCeVRhZ05hbWUoYXJjLCB0YWdOYW1lKSB7XG4gICAgdmFyIGVscyA9IGFyYy5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKTtcbiAgICB2YXIgdmFsID0gZWxzLmxlbmd0aCA+IDAgPyBlbHNbMF0uaW5uZXJIVE1MIDogbnVsbDtcblxuICAgIHJldHVybiB2YWw7XG4gIH1cblxuICB2YXIgc2lmRWRnZVByb3BIYW5kbGVyTWFwID0ge1xuICAgICdwY0lEU2V0JzogZnVuY3Rpb24oYXJjKSB7XG4gICAgICB2YXIgdmFsID0gZ2V0Rmlyc3RCeVRhZ05hbWUoIGFyYywgJ3BjSURzJyApO1xuICAgICAgcmV0dXJuIHN0clRvU2V0KCB2YWwsIC87fCAvICk7XG4gICAgfSxcbiAgICAnc2l0ZUxvY1NldCc6IGZ1bmN0aW9uKGFyYykge1xuICAgICAgdmFyIHZhbCA9IGdldEZpcnN0QnlUYWdOYW1lKCBhcmMsICdzaXRlTG9jYXRpb25zJyApO1xuICAgICAgcmV0dXJuIHN0clRvU2V0KCB2YWwsICc7JyApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgc2lmTm9kZVByb3BIYW5kbGVyTWFwID0ge1xuICAgICd0b29sdGlwJzogZnVuY3Rpb24oZ2x5cGgpIHtcbiAgICAgIHZhciB2YWwgPSBnZXRGaXJzdEJ5VGFnTmFtZSggZ2x5cGgsICd0b29sdGlwJyApO1xuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9LFxuICAgICdpbmZvYm94ZXMnOiBmdW5jdGlvbihnbHlwaCwgZGF0YSkge1xuICAgICAgdmFyIHNpZkluZm9ib3hQcm9wSGFuZGxlck1hcCA9IHtcbiAgICAgICAgJ3Rvb2x0aXAnOiBmdW5jdGlvbihnbHlwaCkge1xuICAgICAgICAgIHZhciB2YWwgPSBnZXRGaXJzdEJ5VGFnTmFtZSggZ2x5cGgsICd0b29sdGlwJyApO1xuICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHZhciBpbmZvYm94R2x5cGhzID0gZ2x5cGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2dseXBoJyk7XG4gICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCAgaW5mb2JveEdseXBocy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgdmFyIGluZm9ib3hHbHlwaCA9IGluZm9ib3hHbHlwaHNbIGkgXTtcbiAgICAgICAgT2JqZWN0LmtleXMoc2lmSW5mb2JveFByb3BIYW5kbGVyTWFwKS5mb3JFYWNoKCBmdW5jdGlvbiggcHJvcE5hbWUgKSB7XG4gICAgICAgICAgdmFyIHZhbCA9IHNpZkluZm9ib3hQcm9wSGFuZGxlck1hcFsgcHJvcE5hbWUgXShpbmZvYm94R2x5cGgpO1xuICAgICAgICAgIGlmICggdmFsICkge1xuICAgICAgICAgICAgZGF0YS5zdGF0ZXNhbmRpbmZvc1tpXVtwcm9wTmFtZV0gPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9ICk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZ1bmN0aW9uIGV4dGVuZEVsZW1lbnRzRGF0YSggZWxlc0RhdGEsIGZpbHRlckZjbiwgZ2V0WE1MRWxlQnlJZCwgcHJvcEhhbmRsZXJNYXAsIHhtbE9iamVjdCApIHtcbiAgICBlbGVzRGF0YS5mb3JFYWNoKCBmdW5jdGlvbiggb2JqICkge1xuICAgICAgdmFyIGRhdGEgPSBvYmouZGF0YTtcbiAgICAgIGlmICggZmlsdGVyRmNuKCBkYXRhLmNsYXNzICkgKSB7XG4gICAgICAgIHZhciB4bWxFbGUgPSBnZXRYTUxFbGVCeUlkKCB4bWxPYmplY3QsIGRhdGEuaWQgKTtcbiAgICAgICAgT2JqZWN0LmtleXMocHJvcEhhbmRsZXJNYXApLmZvckVhY2goIGZ1bmN0aW9uKCBwcm9wTmFtZSApIHtcbiAgICAgICAgICAvLyBkb2VzIG5vdCBoYXZlIHRvIHJldHVybiBhIHZhbHVlLCBtYXliZSBhIHZvaWQgZnVuY3Rpb24gYXMgd2VsbFxuICAgICAgICAgIHZhciB2YWwgPSBwcm9wSGFuZGxlck1hcFsgcHJvcE5hbWUgXSh4bWxFbGUsIGRhdGEpO1xuICAgICAgICAgIGlmICggdmFsICkge1xuICAgICAgICAgICAgZGF0YVsgcHJvcE5hbWUgXSA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gKTtcbiAgICAgIH1cbiAgICB9ICk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRFbE1hcCggZ3JhcGhEYXRhICkge1xuICAgIHZhciBtYXAgPSB7XG4gICAgICBub2Rlczoge30sXG4gICAgICBlZGdlczoge30sXG4gICAgICBpbmZvYm94ZXM6IHt9XG4gICAgfTtcblxuICAgIGdyYXBoRGF0YS5lZGdlcy5mb3JFYWNoKCBmdW5jdGlvbiggZWRnZSApIHtcbiAgICAgIG1hcC5lZGdlc1sgZWRnZS5kYXRhLmlkIF0gPSBlZGdlO1xuICAgIH0gKTtcblxuICAgIGdyYXBoRGF0YS5ub2Rlcy5mb3JFYWNoKCBmdW5jdGlvbiggbm9kZSApIHtcbiAgICAgIG1hcC5ub2Rlc1sgbm9kZS5kYXRhLmlkIF0gPSBub2RlO1xuXG4gICAgICB2YXIgaW5mb2JveGVzID0gbm9kZS5kYXRhLnN0YXRlc2FuZGluZm9zO1xuXG4gICAgICBpbmZvYm94ZXMuZm9yRWFjaCggZnVuY3Rpb24oIGluZm9ib3ggKSB7XG4gICAgICAgIG1hcC5pbmZvYm94ZXNbIGluZm9ib3guaWQgXSA9IGluZm9ib3g7XG4gICAgICB9ICk7XG4gICAgfSApO1xuXG4gICAgcmV0dXJuIG1hcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5RXh0cmFTdHlsZXNEYXRhKCBncmFwaERhdGEsIHhtbE9iamVjdCApIHtcbiAgICB2YXIgbGlzdE9mU3R5bGVzID0geG1sT2JqZWN0LnF1ZXJ5U2VsZWN0b3IoJ2xpc3RPZlN0eWxlcycpXG4gICAgdmFyIHN0eWxlcyA9IGxpc3RPZlN0eWxlcyAmJiBsaXN0T2ZTdHlsZXMucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKTtcblxuICAgIGlmICghc3R5bGVzIHx8IHN0eWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYXR0clRvUHJvcCA9IHtcbiAgICAgICdzaGFwZU5hbWUnOiAnc2hhcGUtbmFtZSdcbiAgICB9O1xuICAgIHZhciBlbE1hcCA9IGdldEVsTWFwKCBncmFwaERhdGEgKTtcblxuICAgIHN0eWxlcy5mb3JFYWNoKCBmdW5jdGlvbiggc3R5bGUgKSB7XG4gICAgICB2YXIgaWRMaXN0ID0gc3R5bGUuZ2V0QXR0cmlidXRlKCdpZExpc3QnKS5zcGxpdCgnICcpO1xuXG4gICAgICBPYmplY3Qua2V5cyggYXR0clRvUHJvcCApLmZvckVhY2goIGZ1bmN0aW9uKCBhdHRyTmFtZSApIHtcbiAgICAgICAgdmFyIGcgPSBzdHlsZS5xdWVyeVNlbGVjdG9yKCdnJyk7XG4gICAgICAgIHZhciB2YWwgPSBnLmdldEF0dHJpYnV0ZSggYXR0ck5hbWUgKTtcblxuICAgICAgICBpZiAoIHZhbCApIHtcbiAgICAgICAgICB2YXIgcHJvcE5hbWUgPSBhdHRyVG9Qcm9wWyBhdHRyTmFtZSBdO1xuXG4gICAgICAgICAgaWRMaXN0LmZvckVhY2goIGZ1bmN0aW9uKCBpZCApIHtcbiAgICAgICAgICAgIGlmICggZWxNYXAubm9kZXNbIGlkIF0gfHwgZWxNYXAuZWRnZXNbIGlkIF0gKSB7XG4gICAgICAgICAgICAgIHZhciBlbCA9IGVsTWFwLm5vZGVzWyBpZCBdIHx8IGVsTWFwLmVkZ2VzWyBpZCBdO1xuICAgICAgICAgICAgICBlbC5kYXRhWyBwcm9wTmFtZSBdID0gdmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIGVsTWFwLmluZm9ib3hlc1sgaWQgXSApIHtcbiAgICAgICAgICAgICAgdmFyIGVsID0gZWxNYXAuaW5mb2JveGVzWyBpZCBdO1xuICAgICAgICAgICAgICBlbC5zdHlsZVsgcHJvcE5hbWUgXSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9ICk7XG4gICAgICAgIH1cbiAgICAgIH0gKTtcbiAgICB9ICk7XG4gIH1cblxuICBud3RUb0pzb24uY29udmVydCA9IGZ1bmN0aW9uKHhtbE9iamVjdCwgdXJsUGFyYW1zKSB7XG4gICAgdmFyIGdyYXBoRGF0YSA9IHNiZ25tbFRvSnNvbi5jb252ZXJ0KHhtbE9iamVjdCwgdXJsUGFyYW1zKTtcbiAgICB2YXIgbWFwVHlwZSA9IGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZTtcblxuICAgIGlmIChtYXBUeXBlICE9PSAnUEQnICYmIG1hcFR5cGUgIT09ICdBRicgJiYgZWxlbWVudFV0aWxpdGllcy5tYXBUeXBlICE9PSAnSHlicmlkU2JnbicpIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuZmlsZUZvcm1hdCA9ICdud3QnO1xuICAgICAgLy8gZXh0ZW5kIGVkZ2VzIGRhdGEgd2l0aCBzaWYgc3BlY2lmaWMgZmVhdHVyZXNcbiAgICAgIGV4dGVuZEVsZW1lbnRzRGF0YSggZ3JhcGhEYXRhLmVkZ2VzLCBlbGVtZW50VXRpbGl0aWVzLmlzU0lGRWRnZSwgc2Jnbm1sVG9Kc29uLmdldEFyY0J5SWQuYmluZChzYmdubWxUb0pzb24pLCBzaWZFZGdlUHJvcEhhbmRsZXJNYXAsIHhtbE9iamVjdCApO1xuICAgICAgZXh0ZW5kRWxlbWVudHNEYXRhKCBncmFwaERhdGEubm9kZXMsIGVsZW1lbnRVdGlsaXRpZXMuaXNTSUZOb2RlLCBzYmdubWxUb0pzb24uZ2V0R2x5cGhCeUlkLmJpbmQoc2Jnbm1sVG9Kc29uKSwgc2lmTm9kZVByb3BIYW5kbGVyTWFwLCB4bWxPYmplY3QgKTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0aGUgc3R5bGUgZGF0YSB0aGF0IGlzIG5vdCBhcHBsaWVkIGJlY2F1c2Ugb2YgcmVzdHJpY3Rpb25zIG9mIGxpYnNiZ25cbiAgICBhcHBseUV4dHJhU3R5bGVzRGF0YSggZ3JhcGhEYXRhLCB4bWxPYmplY3QgKTtcblxuICAgIHJldHVybiBncmFwaERhdGE7XG4gIH07XG5cbiAgbnd0VG9Kc29uLm1hcFByb3BlcnRpZXNUb09iaiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBzYmdubWxUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqKCk7XG4gIH07XG5cbiAgcmV0dXJuIG53dFRvSnNvbjtcbn07XG4iLCIvKlxuICogIEV4dGVuZCBkZWZhdWx0IG9wdGlvbnMgYW5kIGdldCBjdXJyZW50IG9wdGlvbnMgYnkgdXNpbmcgdGhpcyBmaWxlXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIGRlZmF1bHQgb3B0aW9uc1xuICB2YXIgZGVmYXVsdHMgPSB7XG4gICAgLy8gVGhlIHBhdGggb2YgY29yZSBsaWJyYXJ5IGltYWdlcyB3aGVuIHNiZ252aXogaXMgcmVxdWlyZWQgZnJvbSBucG0gYW5kIHRoZSBpbmRleCBodG1sXG4gICAgLy8gZmlsZSBhbmQgbm9kZV9tb2R1bGVzIGFyZSB1bmRlciB0aGUgc2FtZSBmb2xkZXIgdGhlbiB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBmaW5lXG4gICAgaW1nUGF0aDogJ25vZGVfbW9kdWxlcy9zYmdudml6L3NyYy9pbWcnLFxuICAgIC8vIFdoZXRoZXIgdG8gZml0IGxhYmVscyB0byBub2Rlc1xuICAgIGZpdExhYmVsc1RvTm9kZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGZpdExhYmVsc1RvSW5mb2JveGVzOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAvLyBkeW5hbWljIGxhYmVsIHNpemUgaXQgbWF5IGJlICdzbWFsbCcsICdyZWd1bGFyJywgJ2xhcmdlJ1xuICAgIGR5bmFtaWNMYWJlbFNpemU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAncmVndWxhcic7XG4gICAgfSxcbiAgICAvLyBXaGV0aGVyIHRvIGluZmVyIHBhcmVudCBub2RlIG9uIGxvYWQgXG4gICAgaW5mZXJOZXN0aW5nT25Mb2FkOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAvLyBpbnRpYWwgY29tcG91bmQgcGFkZGluZyBmb3IgYWxsIGNvbXBvdW5kIG5vZGVzIFxuICAgIGNvbXBvdW5kUGFkZGluZzogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBpbXByb3ZlRmxvdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIC8vIFdoZXRoZXIgdG8gYWRqdXN0IG5vZGUgbGFiZWwgZm9udCBzaXplIGF1dG9tYXRpY2FsbHkuXG4gICAgLy8gSWYgdGhpcyBvcHRpb24gcmV0dXJuIGZhbHNlIGRvIG5vdCBhZGp1c3QgbGFiZWwgc2l6ZXMgYWNjb3JkaW5nIHRvIG5vZGUgaGVpZ2h0IHVzZXMgbm9kZS5kYXRhKCdmb250LXNpemUnKVxuICAgIC8vIGluc3RlYWQgb2YgZG9pbmcgaXQuXG4gICAgYWRqdXN0Tm9kZUxhYmVsRm9udFNpemVBdXRvbWF0aWNhbGx5OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgLy8gZXh0cmEgcGFkZGluZyBmb3IgY29tcG91bmQgbm9kZXMgZXhjZXB0IGZvciBjb21wbGV4ZXNcbiAgICBleHRyYUNvbXBhcnRtZW50UGFkZGluZzogMTQsXG5cbiAgICAvL2V4dHJhIHBhZGRpbmcgZm9yIGNvbXBsZXggY29tcG91bmQgbm9kZXMsIHJlZmVyIHRvIGVsZW1lbnRVdGlsaXRpZXMuZ2V0Q29tcGxleFBhZGRpbmcgZnVuY3Rpb24gdG8gc2VlIGRldGFpbHNcbiAgICBleHRyYUNvbXBsZXhQYWRkaW5nOiAxMCxcbiAgICAvLyBXZXRoZXIgdG8gZGlzcGxheSB0aGUgY29tcGxleCdzIGxhYmVscywgbGlrZSBjb21wYXJ0bWVudHMuXG4gICAgLy8gV2lsbCBhbHNvIGluY3JlYXNlIHRoZSBwYWRkaW5ncyBieSBleHRyYUNvbXBvdW5kUGFkZGluZyB0byBtYWtlIHJvb20gZm9yIHRoZSBuYW1lLlxuICAgIHNob3dDb21wbGV4TmFtZTogdHJ1ZSxcbiAgICAvLyBUaGUgc2VsZWN0b3Igb2YgdGhlIGNvbXBvbmVudCBjb250YWluaW5nIHRoZSBzYmduIG5ldHdvcmtcbiAgICBuZXR3b3JrQ29udGFpbmVyU2VsZWN0b3I6ICcjc2Jnbi1uZXR3b3JrLWNvbnRhaW5lcicsXG4gICAgLy8gV2hldGhlciB0aGUgYWN0aW9ucyBhcmUgdW5kb2FibGUsIHJlcXVpcmVzIGN5dG9zY2FwZS11bmRvLXJlZG8gZXh0ZW5zaW9uXG4gICAgdW5kb2FibGU6IHRydWVcbiAgfTtcblxuICB2YXIgb3B0aW9uVXRpbGl0aWVzID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gIH07XG5cbiAgLy8gRXh0ZW5kIHRoZSBkZWZhdWx0cyBvcHRpb25zIHdpdGggdGhlIHVzZXIgb3B0aW9uc1xuICBvcHRpb25VdGlsaXRpZXMuZXh0ZW5kT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuXG4gICAgZm9yICh2YXIgcHJvcCBpbiBkZWZhdWx0cykge1xuICAgICAgcmVzdWx0W3Byb3BdID0gZGVmYXVsdHNbcHJvcF07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgcHJvcCBpbiBvcHRpb25zKSB7XG4gICAgICByZXN1bHRbcHJvcF0gPSBvcHRpb25zW3Byb3BdO1xuICAgIH1cblxuICAgIG9wdGlvblV0aWxpdGllcy5vcHRpb25zID0gcmVzdWx0O1xuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH07XG5cbiAgb3B0aW9uVXRpbGl0aWVzLmdldE9wdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG9wdGlvblV0aWxpdGllcy5vcHRpb25zO1xuICB9O1xuXG4gIHJldHVybiBvcHRpb25VdGlsaXRpZXM7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBqc29uVG9TYmdubWwsIGVsZW1lbnRVdGlsaXRpZXMsIGN5O1xuICBcbiAgICBmdW5jdGlvbiBzYmdubWxUb0NkKHBhcmFtKSB7XG4gICAgICBqc29uVG9TYmdubWwgPSBwYXJhbS5qc29uVG9TYmdubWxDb252ZXJ0ZXI7XG4gICAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgICB9XG4gIFxuIFxuICAgIHNiZ25tbFRvQ2QuY29udmVydCA9IGZ1bmN0aW9uICh4bWwsIGNhbGxiYWNrKSB7XG5cbiAgICAgICAkLmFqYXgoe1xuICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLCAgICAgICAgICAgICBcbiAgICAgICAgICAgIHVybDogXCJodHRwOi8vd2ViLm5ld3RlZGl0b3Iub3JnOjgwODAvc2Jnbm1sMmNkXCIsXG4gICAgICAgICAgICBkYXRhOiB4bWwsXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpOyAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChYTUxIdHRwUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG51bGwpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgXG4gICAgICAgIFxuICAgIH1cblxuICAgIHJldHVybiBzYmdubWxUb0NkO1xuICBcbiAgfVxuICBcblxuIiwidmFyIGxpYnNiZ25qcyA9IHJlcXVpcmUoJ2xpYnNiZ24uanMnKTtcbnZhciBwYXJzZVN0cmluZyA9IHJlcXVpcmUoJ3htbDJqcycpLnBhcnNlU3RyaW5nO1xudmFyIGxpYlV0aWxpdGllcyA9IHJlcXVpcmUoJy4vbGliLXV0aWxpdGllcycpO1xudmFyIGxpYnMgPSBsaWJVdGlsaXRpZXMuZ2V0TGlicygpO1xudmFyIGpRdWVyeSA9ICQgPSBsaWJzLmpRdWVyeTtcbnZhciBjbGFzc2VzID0gcmVxdWlyZSgnLi9jbGFzc2VzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZWxlbWVudFV0aWxpdGllcywgZ3JhcGhVdGlsaXRpZXMsIGhhbmRsZWRFbGVtZW50cyxtYWluVXRpbGl0aWVzO1xuXG4gIGZ1bmN0aW9uIHNiZ25tbFRvSnNvbiAocGFyYW0pIHtcbiAgICBvcHRpb25VdGlsaXRpZXMgPSBwYXJhbS5vcHRpb25VdGlsaXRpZXM7XG4gICAgb3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgZ3JhcGhVdGlsaXRpZXMgPSBwYXJhbS5ncmFwaFV0aWxpdGllcztcbiAgICBtYWluVXRpbGl0aWVzID0gcGFyYW0ubWFpblV0aWxpdGllcztcblxuICAgIGhhbmRsZWRFbGVtZW50cyA9IHt9O1xuXG4gICAgZWxlbWVudFV0aWxpdGllcy5lbGVtZW50VHlwZXMuZm9yRWFjaCggZnVuY3Rpb24oIHR5cGUgKSB7XG4gICAgICBoYW5kbGVkRWxlbWVudHNbIHR5cGUgXSA9IHRydWU7XG4gICAgfSApO1xuICB9XG5cbiAgc2Jnbm1sVG9Kc29uLmluc2VydGVkTm9kZXMgPSB7fTtcblxuICBzYmdubWxUb0pzb24ubWFwID0gdW5kZWZpbmVkO1xuICBzYmdubWxUb0pzb24uY2FsY3VsYXRlZENvbXBvdW5kUGFkZGluZyA9IHVuZGVmaW5lZDtcblxuICBzYmdubWxUb0pzb24uZ2V0QWxsQ29tcGFydG1lbnRzID0gZnVuY3Rpb24gKGdseXBoTGlzdCkge1xuICAgIHZhciBjb21wYXJ0bWVudHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ2x5cGhMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZ2x5cGhMaXN0W2ldLmNsYXNzXyA9PSAnY29tcGFydG1lbnQnKSB7XG4gICAgICAgIHZhciBjb21wYXJ0bWVudCA9IGdseXBoTGlzdFtpXTtcbiAgICAgICAgdmFyIGJib3ggPSBjb21wYXJ0bWVudC5iYm94O1xuICAgICAgICBjb21wYXJ0bWVudHMucHVzaCh7XG4gICAgICAgICAgJ3gnOiBwYXJzZUZsb2F0KGJib3gueCksXG4gICAgICAgICAgJ3knOiBwYXJzZUZsb2F0KGJib3gueSksXG4gICAgICAgICAgJ3cnOiBwYXJzZUZsb2F0KGJib3gudyksXG4gICAgICAgICAgJ2gnOiBwYXJzZUZsb2F0KGJib3guaCksXG4gICAgICAgICAgJ2lkJzogY29tcGFydG1lbnQuaWRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29tcGFydG1lbnRzLnNvcnQoZnVuY3Rpb24gKGMxLCBjMikge1xuICAgICAgaWYgKGMxLmggKiBjMS53IDwgYzIuaCAqIGMyLncpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKGMxLmggKiBjMS53ID4gYzIuaCAqIGMyLncpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9KTtcblxuICAgIHJldHVybiBjb21wYXJ0bWVudHM7XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmlzSW5Cb3VuZGluZ0JveCA9IGZ1bmN0aW9uIChiYm94MSwgYmJveDIpIHtcbiAgICBpZiAoYmJveDEueCA+IGJib3gyLnggJiZcbiAgICAgICAgYmJveDEueSA+IGJib3gyLnkgJiZcbiAgICAgICAgYmJveDEueCArIGJib3gxLncgPCBiYm94Mi54ICsgYmJveDIudyAmJlxuICAgICAgICBiYm94MS55ICsgYmJveDEuaCA8IGJib3gyLnkgKyBiYm94Mi5oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5iYm94UHJvcCA9IGZ1bmN0aW9uIChlbGUpIHtcblxuICAgIGlmKGVsZS5iYm94Q2FsY3VsYXRlZCl7XG4gICAgICByZXR1cm4gZWxlLmJib3g7XG4gICAgfVxuXG4gICAgZWxlLmJib3hDYWxjdWxhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY2hpbGROb2RlcyA9IGVsZS5nbHlwaE1lbWJlcnM7XG4gICAgLy9leGNsdWRlIHN0YXRlIHZhcmlhYmxlcyBhbmQgdW5pdHMgb2YgaW5mb3JtYXRpb24gZnJvbSBjaGlsZCBtZW1iZXJzXG4gICAgY2hpbGROb2RlcyA9IGNoaWxkTm9kZXMuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKXsgcmV0dXJuIGNoaWxkLmNsYXNzXyAhPSBcInN0YXRlIHZhcmlhYmxlXCIgJiYgY2hpbGQuY2xhc3NfICE9IFwidW5pdCBvZiBpbmZvcm1hdGlvblwifSk7XG4gICAgdmFyIGJib3ggPSB7fTtcbiAgICBiYm94LnggPSBlbGUuYmJveC54O1xuICAgIGJib3gueSA9IGVsZS5iYm94Lnk7XG4gICAgYmJveC53ID0gZWxlLmJib3gudztcbiAgICBiYm94LmggPSBlbGUuYmJveC5oO1xuICAgIC8vaWYgaXQgaXMgc2ltcGxlIG5vZGUgcmV0dXJuIGJib3hcbiAgICBpZihjaGlsZE5vZGVzLmxlbmd0aCA8PSAwKXtcbiAgICAgIGJib3gueCA9IHBhcnNlRmxvYXQoYmJveC54KSArIHBhcnNlRmxvYXQoYmJveC53KSAvIDI7XG4gICAgICBiYm94LnkgPSBwYXJzZUZsb2F0KGJib3gueSkgKyBwYXJzZUZsb2F0KGJib3guaCkgLyAyO1xuICAgICBcbiAgICAgIHJldHVybiBiYm94O1xuICAgIH1lbHNlIGlmIChlbGUuZXh0ZW5zaW9uICYmIGVsZS5leHRlbnNpb24uaGFzKCdleHRyYUluZm8nKSkgey8vIGlmIG5ld3QgZmlsZSB0aGVuIGV4dHJhaW5mbyBvbiB0aGUgY29tcG91bmQgbm9kZSBleGlzdHNcbiAgICAgICAgdmFyIHhtbCA9IGVsZS5leHRlbnNpb24uZ2V0KCdleHRyYUluZm8nKTtcbiAgICAgICAgdmFyIGV4dHJhSW5mbztcbiAgICAgICAgcGFyc2VTdHJpbmcoeG1sLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICAgZXh0cmFJbmZvID0gcmVzdWx0LmV4dHJhSW5mbztcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZS5vcmlnaW5hbFc9IGJib3gudztcbiAgICAgICAgZWxlLm9yaWdpbmFsSCA9IGJib3guaDtcbiAgICAgICAgYmJveC54ID0gcGFyc2VGbG9hdChiYm94LngpICsgcGFyc2VGbG9hdChiYm94LncpIC8gMjtcbiAgICAgICAgYmJveC55ID0gcGFyc2VGbG9hdChiYm94LnkpICsgcGFyc2VGbG9hdChiYm94LmgpIC8gMjtcbiAgICAgICAgYmJveC53ID0gcGFyc2VGbG9hdChleHRyYUluZm8udyk7XG4gICAgICAgIGJib3guaCA9IHBhcnNlRmxvYXQoZXh0cmFJbmZvLmgpOyAgICAgICBcbiAgICAgICAgZWxlLm1pbldpZHRoID0gcGFyc2VGbG9hdChleHRyYUluZm8ubWluVyk7XG4gICAgICAgIGVsZS5taW5IZWlnaHQgPSBwYXJzZUZsb2F0KGV4dHJhSW5mby5taW5IKTtcbiAgICAgICAgZWxlLm1pbldpZHRoQmlhc0xlZnQgPSBwYXJzZUZsb2F0KGV4dHJhSW5mby5XTEJpYXMpO1xuICAgICAgICBlbGUubWluV2lkdGhCaWFzUmlnaHQgPSBwYXJzZUZsb2F0KGV4dHJhSW5mby5XUkJpYXMpO1xuICAgICAgICBlbGUubWluSGVpZ2h0Qmlhc0JvdHRvbSA9IHBhcnNlRmxvYXQoZXh0cmFJbmZvLkhCQmlhcyk7XG4gICAgICAgIGVsZS5taW5IZWlnaHRCaWFzVG9wID0gcGFyc2VGbG9hdChleHRyYUluZm8uSFRCaWFzKTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBiYm94O1xuXG4gICAgICAgIFxuICAgICB9ZWxzZXtcblxuICAgICAvKiAgdmFyIHN0eWxlcztcbiAgICAgIGlmICh0aGlzLm1hcC5leHRlbnNpb24gJiYgdGhpcy5tYXAuZXh0ZW5zaW9uLmhhcygncmVuZGVySW5mb3JtYXRpb24nKSkgeyAvLyByZW5kZXIgZXh0ZW5zaW9uIHdhcyBmb3VuZFxuICAgICAgICBzdHlsZXMgPSB0aGlzLm1hcC5leHRlbnNpb24uZ2V0KCdyZW5kZXJJbmZvcm1hdGlvbicpLmxpc3RPZlN0eWxlcztcbiAgICAgICAgaWYoc3R5bGVzICAhPT0gdW5kZWZpbmVkKXtcbiAgICAgICAgICBzdHlsZXMgPSBzdHlsZXMuc3R5bGVzO1xuICAgICAgICB9XG4gICAgICB9XG4gKi9cbiAgICAgLyogIHZhciBjb21wb3VuZFBhZGRpbmcgPSBwYXJzZUZsb2F0KG1hcFByb3BlcnRpZXMuY29tcG91bmRQYWRkaW5nKTtcbiAgICAgIHZhciBleHRyYUNvbXBhcnRtZW50UGFkZGluZyA9IHBhcnNlRmxvYXQobWFwUHJvcGVydGllcy5leHRyYUNvbXBhcnRtZW50UGFkZGluZyk7ICovXG4gICAgICBcbiAgICAgXG4gICAgICB2YXIgcGFkZGluZyA9IHRoaXMuY2FsY3VsYXRlRWxlbWVudFBhZGRpbmcoZWxlKTtcbiAgICAgIGlmKGVsZS5jbGFzc18gPT0gXCJjb21wbGV4XCIpe1xuICAgICAgICBlbGUuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nID0gcGFkZGluZztcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdmFyIG1pbkxlZnQsIG1heFJpZ2h0LCBtaW5Ub3AsIG1heEJvdHRvbSwgY2hpbGRyZW5CYm94VywgY2hpbGRyZW5CYm94SCxtaW5MZWZ0Qm9yZGVyLG1heFJpZ2h0Qm9yZGVyLG1pblRvcEJvcmRlcixtYXhCb3R0b21Cb3JkZXI7IFxuICAgICAgdmFyIGZyb21JbmZvQm94ID0gZmFsc2U7XG4gICAgICAvLyBUcmF2ZXJzZSB0aGUgb3RoZXIgY2hpbGRyZW4gYW5kIHVwZGF0ZSB0aGUgZXh0cmVtZSB2YWx1ZXNcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tpXTtcbiAgICAgIFxuICAgICAgICB2YXIgY2hpbGROb2RlQmJveCA9IHRoaXMuYmJveFByb3AoY2hpbGROb2RlKTtcbiAgICAgICBcbiAgICAgICAgY2hpbGROb2RlLmJib3ggPSBjaGlsZE5vZGVCYm94O1xuICAgICAgICB2YXIgYm9yZGVyV2lkdGggPSBlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKGNoaWxkTm9kZS5jbGFzc18pW1wiYm9yZGVyLXdpZHRoXCJdOyBcbiAgICAgICAgdmFyIGNoaWxkUGFkZGluZyA9IHRoaXMuY2FsY3VsYXRlRWxlbWVudFBhZGRpbmcoY2hpbGROb2RlKTtcbiAgICAgICAgLy92YXIgY2hpbGRTdHlsZSA9IHN0eWxlcy5maWx0ZXIoc3R5bGUgPT57IHJldHVybiBzdHlsZS5pZExpc3QgPT0gY2hpbGROb2RlLmlkfSk7XG4gICAgICAgXG4gICAgICAgLyogIGlmKGNoaWxkU3R5bGUubGVuZ3RoID4gMCAmJiBjaGlsZFN0eWxlWzBdLnJlbmRlckdyb3VwICE9PSB1bmRlZmluZWQpe1xuICAgICAgICAgIGJvcmRlcldpZHRoID0gY2hpbGRTdHlsZVswXS5yZW5kZXJHcm91cC5zdHJva2VXaWR0aDtcbiAgICAgICAgfSAqL1xuXG4gICAgICAgIHZhciBsZWZ0ID0gY2hpbGROb2RlQmJveC54IC0gY2hpbGROb2RlQmJveC53LzIgLSBjaGlsZFBhZGRpbmcgO1xuICAgICAgICB2YXIgcmlnaHQgPSBjaGlsZE5vZGVCYm94LnggKyBjaGlsZE5vZGVCYm94LncvMiArIGNoaWxkUGFkZGluZztcbiAgICAgICAgdmFyIHRvcCA9IGNoaWxkTm9kZUJib3gueSAgLSBjaGlsZE5vZGVCYm94LmgvMiAtIGNoaWxkUGFkZGluZztcbiAgICAgICAgdmFyIGJvdHRvbSA9IGNoaWxkTm9kZUJib3gueSArIGNoaWxkTm9kZUJib3guaC8yICsgY2hpbGRQYWRkaW5nO1xuICAgICAgICB2YXIgc3RhdGVBbmRJbmZvcyA9IGNoaWxkTm9kZS5nbHlwaE1lbWJlcnMuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKXsgcmV0dXJuIGNoaWxkLmNsYXNzXyA9PSBcInN0YXRlIHZhcmlhYmxlXCIgfHwgY2hpbGQuY2xhc3NfID09IFwidW5pdCBvZiBpbmZvcm1hdGlvblwifSk7XG4gICAgICAgIGlmKHN0YXRlQW5kSW5mb3MubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICBmb3IodmFyIGsgPSAwIDsgazxzdGF0ZUFuZEluZm9zLmxlbmd0aDsgaysrKXtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGVCYm94ID0gc3RhdGVBbmRJbmZvc1trXS5iYm94O1xuICAgICAgICAgICAgICAgIGlmKG1pbkxlZnQgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZUJib3gueCA8IG1pbkxlZnQpe1xuICAgICAgICAgICAgICAgICAgbWluTGVmdCA9IHN0YXRlQmJveC54O1xuICAgICAgICAgICAgICAgICAgZnJvbUluZm9Cb3ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgbWluTGVmdEJvcmRlciA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYobWF4UmlnaHQgPT09IHVuZGVmaW5lZCB8fCBzdGF0ZUJib3gueCArIHN0YXRlQmJveC53ID4gbWF4UmlnaHQpe1xuICAgICAgICAgICAgICAgICAgbWF4UmlnaHQgPSBzdGF0ZUJib3gueCArIHN0YXRlQmJveC53O1xuICAgICAgICAgICAgICAgICAgZnJvbUluZm9Cb3ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgbWF4UmlnaHRCb3JkZXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmKG1pblRvcCA9PT0gdW5kZWZpbmVkIHx8IHN0YXRlQmJveC55IDwgbWluVG9wKXtcbiAgICAgICAgICAgICAgICAgIG1pblRvcCA9IHN0YXRlQmJveC55O1xuICAgICAgICAgICAgICAgICAgZnJvbUluZm9Cb3ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgbWluVG9wQm9yZGVyID0gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihtYXhCb3R0b20gPT09IHVuZGVmaW5lZCB8fCBzdGF0ZUJib3gueSArIHN0YXRlQmJveC5oID4gbWF4Qm90dG9tKXtcbiAgICAgICAgICAgICAgICAgIG1heEJvdHRvbSA9IHN0YXRlQmJveC55ICsgc3RhdGVCYm94Lmg7XG4gICAgICAgICAgICAgICAgICBmcm9tSW5mb0JveCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBtYXhCb3R0b21Cb3JkZXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluTGVmdCA9PT0gdW5kZWZpbmVkIHx8IGxlZnQgPCBtaW5MZWZ0KSB7XG4gICAgICAgICAgbWluTGVmdCA9IGxlZnQ7XG4gICAgICAgICAgZnJvbUluZm9Cb3ggPSBmYWxzZTtcbiAgICAgICAgICBtaW5MZWZ0Qm9yZGVyID0gYm9yZGVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4UmlnaHQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA+IG1heFJpZ2h0KSB7XG4gICAgICAgICAgbWF4UmlnaHQgPSByaWdodDtcbiAgICAgICAgICBmcm9tSW5mb0JveCA9IGZhbHNlO1xuICAgICAgICAgIG1heFJpZ2h0Qm9yZGVyID0gYm9yZGVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWluVG9wID09PSB1bmRlZmluZWQgfHwgdG9wIDwgbWluVG9wKSB7XG4gICAgICAgICAgbWluVG9wID0gdG9wO1xuICAgICAgICAgIGZyb21JbmZvQm94ID0gZmFsc2U7XG4gICAgICAgICAgbWluVG9wQm9yZGVyID0gYm9yZGVyV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4Qm90dG9tID09PSB1bmRlZmluZWQgfHwgYm90dG9tID4gbWF4Qm90dG9tKSB7XG4gICAgICAgICAgbWF4Qm90dG9tID0gYm90dG9tO1xuICAgICAgICAgIGZyb21JbmZvQm94ID0gZmFsc2U7XG4gICAgICAgICAgbWF4Qm90dG9tQm9yZGVyID0gYm9yZGVyV2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGF2ZXJhZ2VCb3JkZXJXaWR0aFcgPSAgKG1pbkxlZnRCb3JkZXIgKyBtYXhSaWdodEJvcmRlcikvMjtcbiAgICAgIHZhciBhdmVyYWdlQm9yZGVyV2lkdGhIID0gKG1pblRvcEJvcmRlciArIG1heEJvdHRvbUJvcmRlcikvMjtcbiAgICAgIC8vIFRoZSBzaXplcyBvZiBjaGlsZHJlbiBiYm94IGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGV4dHJlbWUgY29vcmRpbmF0ZXNcbiAgICAgIGNoaWxkcmVuQmJveFcgPSBtYXhSaWdodCAtIG1pbkxlZnQgKyAyOyAvLyAyIGlzIGZyb20gY3l0b3NjYXBlIGludGVybmFsIGltcGxlbWVudGF0aW9uIG9mIGluZm9ib3hlc1xuICAgICAgY2hpbGRyZW5CYm94SCA9IG1heEJvdHRvbSAtIG1pblRvcCArIDI7XG4gICAgIFxuICAgICBcbiAgICBcbiAgICAgIC8vIElmIGNoaWxkcmVuIGJib3ggd2lkdGggaXMgbGVzcyB0aGFuIG5vZGUgYmJveCB3aWR0aCArIHBhZGRpbmdzIHNldCBtaW5XaWR0aCwgYW5kIGhvcml6b250YWwgYmlhc2VzXG4gICAgICBpZiAoTnVtYmVyKChjaGlsZHJlbkJib3hXICsgMiAqIHBhZGRpbmcgKyBhdmVyYWdlQm9yZGVyV2lkdGhXICsgKGZyb21JbmZvQm94ID8gIDIgKiBib3JkZXJXaWR0aCA6IDApKS50b0ZpeGVkKDIpKSA8IE51bWJlcihiYm94LncudG9GaXhlZCgyKSkpIHtcblxuICAgICAgICAvL2VsZS5taW5XaWR0aCA9IGJib3gudyAtIDIgcGFkZGluZyAgY2FsY3VsYXRlIGJhZGRpbmcgZmlyc3RcbiAgICAgICAgZWxlLm1pbldpZHRoID0gIGJib3gudyAtIDIgKiBwYWRkaW5nO1xuICAgICAgICB2YXIgZXh0cmFMZWZ0ID0gIE51bWJlcigobWluTGVmdCAtIGJib3gueCAgLSBwYWRkaW5nIC0gbWluTGVmdEJvcmRlci8yIC0xKS50b0ZpeGVkKDIpKSA7XG4gICAgICAgIHZhciBleHRyYVJpZ2h0ID0gTnVtYmVyKCgoYmJveC54ICsgYmJveC53KSAtIG1heFJpZ2h0ICAtIHBhZGRpbmcgLSBtYXhSaWdodEJvcmRlci8yIC0gMSkudG9GaXhlZCgyKSkgO1xuXG4gICAgICAgXG4gICAgICAgIGVsZS5taW5XaWR0aEJpYXNMZWZ0ID0gZXh0cmFMZWZ0IC8gKGV4dHJhTGVmdCArIGV4dHJhUmlnaHQpICogMTAwO1xuICAgICAgICBlbGUubWluV2lkdGhCaWFzUmlnaHQgPSAxMDAgLSBlbGUubWluV2lkdGhCaWFzTGVmdDtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgY2hpbGRyZW4gYmJveCBoZWlnaHQgaXMgYmlnZ2VyIHRoYW4gbm9kZSBiYm94IGhlaWdodCBzZXQgbWluSGVpZ2h0LCBhbmQgdmVydGljYWwgYmlhc2VzXG4gICAgICBpZiAoTnVtYmVyKChjaGlsZHJlbkJib3hIICsgMiAqIHBhZGRpbmcgKyBhdmVyYWdlQm9yZGVyV2lkdGhIICsgKGZyb21JbmZvQm94ID8gIDIgKiBib3JkZXJXaWR0aCA6IDApKS50b0ZpeGVkKDIpKSA8IE51bWJlcihiYm94LmgudG9GaXhlZCgyKSkpIHtcbiAgICAgICAgZWxlLm1pbkhlaWdodCA9IGJib3guaCAtIDIgKiBwYWRkaW5nO1xuICAgICAgICB2YXIgZXh0cmFUb3AgPSBOdW1iZXIoKG1pblRvcCAtIGJib3gueSAtIHBhZGRpbmcgLSBtaW5Ub3BCb3JkZXIvMiAtIDEpLnRvRml4ZWQoMikpO1xuICAgICAgICB2YXIgZXh0cmFCb3R0b20gPSBOdW1iZXIoKChiYm94LnkgKyBiYm94LmgpIC0gbWF4Qm90dG9tIC0gcGFkZGluZyAtIG1heEJvdHRvbUJvcmRlci8yIC0gMSkudG9GaXhlZCgyKSk7ICAgICAgICBcblxuICAgICAgICBlbGUubWluSGVpZ2h0Qmlhc1RvcCA9IGV4dHJhVG9wIC8gKGV4dHJhVG9wICsgZXh0cmFCb3R0b20pICogMTAwO1xuICAgICAgICBlbGUubWluSGVpZ2h0Qmlhc0JvdHRvbSA9IDEwMCAtIGVsZS5taW5IZWlnaHRCaWFzVG9wO1xuICAgICAgfVxuICAgICAgXG5cbiAgICAgIC8vIHNldCBwb3NpdGlvbnMgYXMgY2VudGVyXG5cbiAgICAgIGJib3gueCA9IHBhcnNlRmxvYXQoYmJveC54KSArIHBhcnNlRmxvYXQoYmJveC53KSAvIDI7XG4gICAgICBiYm94LnkgPSBwYXJzZUZsb2F0KGJib3gueSkgKyBwYXJzZUZsb2F0KGJib3guaCkgLyAyO1xuICAgICAgIC8vYmJveC54ID0gKG1pbkxlZnQgKyBtYXhSaWdodCkgLzI7XG4gICAgIC8vIGJib3gueSA9IChtaW5Ub3AgKyBtYXhCb3R0b20pIC8gMjtcbiAgICAgIGJib3gudyA9IGJib3gudyAtIDIgKiBwYWRkaW5nIC0gYXZlcmFnZUJvcmRlcldpZHRoVztcbiAgICAgIGJib3guaCA9IGJib3guaCAtIDIgKiBwYWRkaW5nIC0gYXZlcmFnZUJvcmRlcldpZHRoSDtcbiAgICAgIGJib3gudyA9IGJib3gudyA8IDAgPyAwIDogYmJveC53O1xuICAgICAgYmJveC5oID0gYmJveC5oIDwgMCA/IDAgOiBiYm94Lmg7XG5cbiAgICAgIHJldHVybiBiYm94O1xuICAgICB9XG4gICAgXG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLnN0YXRlQW5kSW5mb0Jib3hQcm9wID0gZnVuY3Rpb24gKGVsZSwgcGFyZW50QmJveCkge1xuICAgIC8vIGRvbid0IGNvcHkgZGlyZWN0bHkgZWxlLmJveCBiZWNhdXNlIGl0IGNvbnRhaW5zIG90aGVyIHRoaW5ncyB0aGFuIHggeSB3IGhcbiAgICB2YXIgYmJveCA9IHt9O1xuXG4gICAgaWYoZWxlLmJib3ggIT0gbnVsbCl7XG4gICAgICBiYm94LnggPSBlbGUuYmJveC54IDtcbiAgICAgIGJib3gueSA9IGVsZS5iYm94Lnk7XG4gICAgICBiYm94LncgPSBlbGUuYmJveC53O1xuICAgICAgYmJveC5oID0gZWxlLmJib3guaDtcbiAgICB9ZWxzZXtcbiAgICAgIGJib3gueCA9IDAgO1xuICAgICAgYmJveC55ID0gMDtcbiAgICAgIGJib3gudyA9IDEyO1xuICAgICAgYmJveC5oID0gMTI7XG4gICAgfVxuICAgXG4gICBcblxuXG4gICAgcmV0dXJuIGJib3g7XG4gIH07XG4gIHNiZ25tbFRvSnNvbi5jYWxjdWxhdGVFbGVtZW50UGFkZGluZyA9IGZ1bmN0aW9uKGVsZSl7XG4gICAgICB2YXIgcGFkZGluZyA9IDAgO1xuICAgICBcbiAgICAgIHZhciBjaGlsZE5vZGVzID0gZWxlLmdseXBoTWVtYmVycztcbiAgICAvL2V4Y2x1ZGUgc3RhdGUgdmFyaWFibGVzIGFuZCB1bml0cyBvZiBpbmZvcm1hdGlvbiBmcm9tIGNoaWxkIG1lbWJlcnNcbiAgICAgIGNoaWxkTm9kZXMgPSBjaGlsZE5vZGVzLmZpbHRlcihmdW5jdGlvbihjaGlsZCl7IHJldHVybiBjaGlsZC5jbGFzc18gIT0gXCJzdGF0ZSB2YXJpYWJsZVwiICYmIGNoaWxkLmNsYXNzXyAhPSBcInVuaXQgb2YgaW5mb3JtYXRpb25cIn0pO1xuICAgICAgaWYoY2hpbGROb2Rlcy5sZW5ndGggPD0gMCApIHJldHVybiAwO1xuICAgICAgdmFyIGNvbXBvdW5kUGFkZGluZyA9IHR5cGVvZiBvcHRpb25zLmNvbXBvdW5kUGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuY29tcG91bmRQYWRkaW5nLmNhbGwoKSA6IG9wdGlvbnMuY29tcG91bmRQYWRkaW5nO1xuICAgICAvLyB9IFxuICAgICAgaWYoZWxlLmNsYXNzXyA9PSBcImNvbXBsZXhcIil7XG4gICAgICAgIHZhciBjb21wbGV4UGFkZGluZyA9IDA7XG4gICAgICAgIHZhciBleHRyYUNvbXBsZXhQYWRkaW5nID0gdHlwZW9mIG9wdGlvbnMuZXh0cmFDb21wbGV4UGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMuZXh0cmFDb21wbGV4UGFkZGluZy5jYWxsKCkgOiBvcHRpb25zLmV4dHJhQ29tcGxleFBhZGRpbmc7XG4gICAgICAgIGNvbXBsZXhQYWRkaW5nID0gY29tcG91bmRQYWRkaW5nIDwgNSA/IDUgOiBjb21wb3VuZFBhZGRpbmc7ICAgICAgIFxuXG4gICAgICAgIHZhciBzdGF0ZUFuZEluZm9zID0gZWxlLmdseXBoTWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oY2hpbGQpeyByZXR1cm4gY2hpbGQuY2xhc3NfID09IFwic3RhdGUgdmFyaWFibGVcIiB8fCBjaGlsZC5jbGFzc18gPT0gXCJ1bml0IG9mIGluZm9ybWF0aW9uXCJ9KTtcbiAgICAgICAgICAgIFxuICAgICAgICBpZihlbGUubGFiZWwgIT0gdW5kZWZpbmVkICYmIGVsZS5sYWJlbC50ZXh0ICE9IHVuZGVmaW5lZCAmJiBlbGUubGFiZWwudGV4dC5sZW5ndGggPiAwKXsgXG4gICAgICAgICBcbiAgICAgICAgICAgICAgY29tcGxleFBhZGRpbmcgPSBjb21wbGV4UGFkZGluZyArIDAuNSAqIGV4dHJhQ29tcGxleFBhZGRpbmc7XG4gICAgICAgICAgICAgIHZhciBoYXNUb3BCb3R0b21JbmZvID0gZmFsc2U7XG4gICAgICAgICAgICAgIHN0YXRlQW5kSW5mb3MuZm9yRWFjaChmdW5jdGlvbihzdGF0ZUFuZEluZm8pe1xuICAgICAgICAgICAgICAgIGlmKE51bWJlcigoc3RhdGVBbmRJbmZvLmJib3gueSArIHN0YXRlQW5kSW5mby5iYm94LmgvMikudG9GaXhlZCgyKSkgPT0gTnVtYmVyKChlbGUuYmJveC55ICsgZWxlLmJib3guaCkudG9GaXhlZCgyKSkpe1xuICAgICAgICAgICAgICAgICAgaGFzVG9wQm90dG9tSW5mbyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgXG4gICAgICAgICAgICAgIGlmKGhhc1RvcEJvdHRvbUluZm8pe1xuICAgICAgICAgICAgICAgIGNvbXBsZXhQYWRkaW5nID0gY29tcGxleFBhZGRpbmcgKyAwLjUgKiBleHRyYUNvbXBsZXhQYWRkaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgIH1lbHNlIGlmKHN0YXRlQW5kSW5mb3MubGVuZ3RoID4gMCl7XG4gICAgICAgICAgY29tcGxleFBhZGRpbmcgKz0gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhZGRpbmcgPSBjb21wbGV4UGFkZGluZztcblxuICAgICAgfWVsc2V7XG4gICAgICAgIHZhciBleHRyYUNvbXBhcnRtZW50UGFkZGluZyA9IHR5cGVvZiBvcHRpb25zLmV4dHJhQ29tcGFydG1lbnRQYWRkaW5nID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5leHRyYUNvbXBhcnRtZW50UGFkZGluZy5jYWxsKCkgOiBvcHRpb25zLmV4dHJhQ29tcGFydG1lbnRQYWRkaW5nO1xuICAgICAgICBwYWRkaW5nID0gZXh0cmFDb21wYXJ0bWVudFBhZGRpbmcgKyAgY29tcG91bmRQYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFkZGluZztcbiAgICAgIFxuICB9O1xuICBzYmdubWxUb0pzb24uZmluZENoaWxkTm9kZXMgPSBmdW5jdGlvbiAoZWxlLCBjaGlsZFRhZ05hbWUpIHtcbiAgICAvLyBmaW5kIGNoaWxkIG5vZGVzIGF0IGRlcHRoIGxldmVsIG9mIDEgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnRcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBlbGUuY2hpbGROb2Rlc1tpXTtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSAmJiBjaGlsZC50YWdOYW1lID09PSBjaGlsZFRhZ05hbWUpIHtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfTtcblxuICBzYmdubWxUb0pzb24uZmluZENoaWxkTm9kZSA9IGZ1bmN0aW9uIChlbGUsIGNoaWxkVGFnTmFtZSkge1xuICAgIHZhciBub2RlcyA9IHRoaXMuZmluZENoaWxkTm9kZXMoZWxlLCBjaGlsZFRhZ05hbWUpO1xuICAgIHJldHVybiBub2Rlcy5sZW5ndGggPiAwID8gbm9kZXNbMF0gOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLnN0YXRlQW5kSW5mb1Byb3AgPSBmdW5jdGlvbiAoZWxlLCBwYXJlbnQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHBhcmVudEJib3ggPSBwYXJlbnQuYmJveDtcbiAgICB2YXIgc3RhdGVBbmRJbmZvQXJyYXkgPSBbXTtcblxuICAgIHZhciBjaGlsZEdseXBocyA9IGVsZS5nbHlwaE1lbWJlcnM7IC8vIHRoaXMuZmluZENoaWxkTm9kZXMoZWxlLCAnZ2x5cGgnKTtcblxuICAgIC8vIGlmIGEgYmlvbG9naWNhbCBhY3Rpdml0eSBub2RlIGhhcyBubyB1bml0IG9mIGluZm8sIGl0IG11c3QgYmUgYSBCQSBwbGFpblxuICAgIGlmKHBhcmVudC5jbGFzcyA9PSBcImJpb2xvZ2ljYWwgYWN0aXZpdHlcIiAmJiBjaGlsZEdseXBocy5sZW5ndGggPT0gMCkge1xuICAgICAgcGFyZW50LmNsYXNzID0gXCJCQSBwbGFpblwiO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRHbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBnbHlwaCA9IGNoaWxkR2x5cGhzW2ldO1xuXG4gICAgICBpZiAoZ2x5cGguY2xhc3NfICE9PSAndW5pdCBvZiBpbmZvcm1hdGlvbicgJiYgZ2x5cGguY2xhc3NfICE9PSAnc3RhdGUgdmFyaWFibGUnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaW5mbyA9IHt9O1xuICAgICAgdmFyIGluZm9ib3g7XG4gICAgICB2YXIgaW5mb2JveElkID0gZ2x5cGguaWQ7XG5cbiAgICAgIGlmIChnbHlwaC5jbGFzc18gPT09ICd1bml0IG9mIGluZm9ybWF0aW9uJykge1xuICAgICAgICBpbmZvYm94ID0gY2xhc3Nlcy5Vbml0T2ZJbmZvcm1hdGlvbi5jb25zdHJ1Y3QodW5kZWZpbmVkLCB1bmRlZmluZWQsIGluZm9ib3hJZCk7XG4gICAgICAgIGlmKGdseXBoLmVudGl0eSkge1xuICAgICAgICAgIC8vIGNoYW5nZSB0aGUgcGFyZW50IGNsYXNzIGFjY29yZGluZyB0byBpdHMgdHJ1ZSBjbGFzcyBvZiBiaW9sb2dpY2FsIGFjdGl2aXR5XG4gICAgICAgICAgc3dpdGNoKGdseXBoLmVudGl0eS5uYW1lKSB7XG4gICAgICAgICAgICBjYXNlICd1bnNwZWNpZmllZCBlbnRpdHknOiAgICBwYXJlbnQuY2xhc3MgPSBcIkJBIHVuc3BlY2lmaWVkIGVudGl0eVwiOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NpbXBsZSBjaGVtaWNhbCc6ICAgICAgIHBhcmVudC5jbGFzcyA9IFwiQkEgc2ltcGxlIGNoZW1pY2FsXCI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWFjcm9tb2xlY3VsZSc6ICAgICAgICAgcGFyZW50LmNsYXNzID0gXCJCQSBtYWNyb21vbGVjdWxlXCI7IGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbnVjbGVpYyBhY2lkIGZlYXR1cmUnOiAgcGFyZW50LmNsYXNzID0gXCJCQSBudWNsZWljIGFjaWQgZmVhdHVyZVwiOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3BlcnR1cmJhdGlvbic6ICAgICAgICAgIHBhcmVudC5jbGFzcyA9IFwiQkEgcGVydHVyYmluZyBhZ2VudFwiOyBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXgnOiAgICAgICAgICAgICAgIHBhcmVudC5jbGFzcyA9IFwiQkEgY29tcGxleFwiOyBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5mb2JveC5sYWJlbCA9IHtcbiAgICAgICAgICAndGV4dCc6IChnbHlwaC5sYWJlbCAmJiBnbHlwaC5sYWJlbC50ZXh0KSB8fCB1bmRlZmluZWRcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSBpZiAoZ2x5cGguY2xhc3NfID09PSAnc3RhdGUgdmFyaWFibGUnKSB7XG4gICAgICAgIGluZm9ib3ggPSBjbGFzc2VzLlN0YXRlVmFyaWFibGUuY29uc3RydWN0KHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGluZm9ib3hJZCk7XG5cbiAgICAgICAgdmFyIHN0YXRlID0gZ2x5cGguc3RhdGU7XG4gICAgICAgIGluZm9ib3guc3RhdGUudmFsdWUgPSAoc3RhdGUgJiYgc3RhdGUudmFsdWUpIHx8IHVuZGVmaW5lZDtcbiAgICAgICAgaW5mb2JveC5zdGF0ZS52YXJpYWJsZSA9IChzdGF0ZSAmJiBzdGF0ZS52YXJpYWJsZSkgfHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgLy92YXIgYmJveEFuZEFuY2hvclJlc3VsdCA9IGdldEF1eFVuaXRDbGFzcyhpbmZvYm94KS5zZXRBbmNob3JTaWRlQW5kQmJveCgpO1xuXG4gICAgICBpbmZvYm94LmJib3ggPSBzZWxmLnN0YXRlQW5kSW5mb0Jib3hQcm9wKGdseXBoLCBwYXJlbnRCYm94KTtcbiAgICAgIGluZm9ib3guc3R5bGUgPSBzZWxmLmdldERlZmF1bHRTdGF0ZUFuZEluZm9TdHlsZShnbHlwaCwgcGFyZW50LmNsYXNzKTtcbiAgICAgIC8vY2xhc3Nlcy5TdGF0ZVZhcmlhYmxlLnNldEFuY2hvclNpZGUoaW5mb2JveCk7XG4gICAgICBzdGF0ZUFuZEluZm9BcnJheS5wdXNoKGluZm9ib3gpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZUFuZEluZm9BcnJheTtcbiAgfTtcblxuICBzYmdubWxUb0pzb24uZ2V0RGVmYXVsdFN0YXRlQW5kSW5mb1N0eWxlID0gZnVuY3Rpb24oZ3lscGgsIHBhcmVudENsYXNzKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdEluZm9ib3hTdHlsZSggcGFyZW50Q2xhc3MsIGd5bHBoLmNsYXNzXyApO1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5hZGRQYXJlbnRJbmZvVG9Ob2RlID0gZnVuY3Rpb24gKGVsZSwgbm9kZU9iaiwgcGFyZW50LCBjb21wYXJ0bWVudHMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGNvbXBhcnRtZW50UmVmID0gZWxlLmNvbXBhcnRtZW50UmVmO1xuXG4gICAgdmFyIGluZmVyTmVzdGluZ09uTG9hZCA9IG9wdGlvbnMuaW5mZXJOZXN0aW5nT25Mb2FkO1xuICAgIGluZmVyTmVzdGluZ09uTG9hZCA9IHR5cGVvZiBpbmZlck5lc3RpbmdPbkxvYWQgPT09ICdmdW5jdGlvbicgPyBpbmZlck5lc3RpbmdPbkxvYWQuY2FsbCgpIDogaW5mZXJOZXN0aW5nT25Mb2FkO1xuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgbm9kZU9iai5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfSBlbHNlIGlmIChjb21wYXJ0bWVudFJlZikge1xuICAgICAgbm9kZU9iai5wYXJlbnQgPSBjb21wYXJ0bWVudFJlZjtcbiAgICB9IGVsc2UgaWYoaW5mZXJOZXN0aW5nT25Mb2FkKSB7XG4gICAgICBub2RlT2JqLnBhcmVudCA9ICcnO1xuXG4gICAgICAvLyBhZGQgY29tcGFydG1lbnQgYWNjb3JkaW5nIHRvIGdlb21ldHJ5XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBhcnRtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYmJveCA9IHtcbiAgICAgICAgICAneCc6IHBhcnNlRmxvYXQoZWxlLmJib3gueCksXG4gICAgICAgICAgJ3knOiBwYXJzZUZsb2F0KGVsZS5iYm94LnkpLFxuICAgICAgICAgICd3JzogcGFyc2VGbG9hdChlbGUuYmJveC53KSxcbiAgICAgICAgICAnaCc6IHBhcnNlRmxvYXQoZWxlLmJib3guaCksXG4gICAgICAgICAgJ2lkJzogZWxlLmlkXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzZWxmLmlzSW5Cb3VuZGluZ0JveChiYm94LCBjb21wYXJ0bWVudHNbaV0pKSB7XG4gICAgICAgICAgbm9kZU9iai5wYXJlbnQgPSBjb21wYXJ0bWVudHNbaV0uaWQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmFkZEN5dG9zY2FwZUpzTm9kZSA9IGZ1bmN0aW9uIChlbGUsIGpzb25BcnJheSwgcGFyZW50LCBjb21wYXJ0bWVudHMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIG5vZGVPYmogPSB7fTtcbiAgICB2YXIgc3R5bGVPYmogPSB7fTtcblxuICAgIC8vIGFkZCBpZCBpbmZvcm1hdGlvblxuICAgIG5vZGVPYmouaWQgPSBlbGUuaWQ7XG4gICAgLy8gYWRkIG5vZGUgYm91bmRpbmcgYm94IGluZm9ybWF0aW9uXG4gICAgbm9kZU9iai5iYm94ID0gc2VsZi5iYm94UHJvcChlbGUpOyAgICBcblxuICAgIGlmIChlbGUubWluV2lkdGgpIHtcbiAgICAgIG5vZGVPYmoubWluV2lkdGggPSBlbGUubWluV2lkdGg7XG4gICAgICBub2RlT2JqLm1pbldpZHRoQmlhc0xlZnQgPSBlbGUubWluV2lkdGhCaWFzTGVmdDtcbiAgICAgIG5vZGVPYmoubWluV2lkdGhCaWFzUmlnaHQgPSBlbGUubWluV2lkdGhCaWFzUmlnaHQ7XG4gICAgfVxuXG4gICAgaWYgKGVsZS5taW5IZWlnaHQpIHtcbiAgICAgIG5vZGVPYmoubWluSGVpZ2h0ID0gZWxlLm1pbkhlaWdodDtcbiAgICAgIG5vZGVPYmoubWluSGVpZ2h0Qmlhc1RvcCA9IGVsZS5taW5IZWlnaHRCaWFzVG9wO1xuICAgICAgbm9kZU9iai5taW5IZWlnaHRCaWFzQm90dG9tID0gZWxlLm1pbkhlaWdodEJpYXNCb3R0b207XG4gICAgfVxuICAgIGlmKGVsZS5vcmlnaW5hbFcpe1xuICAgICAgbm9kZU9iai5vcmlnaW5hbFcgPSBlbGUub3JpZ2luYWxXO1xuICAgIH1cbiAgICBpZihlbGUub3JpZ2luYWxIKXtcbiAgICAgIG5vZGVPYmoub3JpZ2luYWxIID0gZWxlLm9yaWdpbmFsSDtcbiAgICB9XG5cbiAgICBpZihlbGUuY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nKXtcbiAgICAgIG5vZGVPYmouY29tcGxleENhbGN1bGF0ZWRQYWRkaW5nID0gZWxlLmNvbXBsZXhDYWxjdWxhdGVkUGFkZGluZztcbiAgICB9XG5cbiAgICAvLyBhZGQgY2xhc3MgaW5mb3JtYXRpb25cbiAgICBub2RlT2JqLmNsYXNzID0gZWxlLmNsYXNzXztcbiAgICAvLyBhZGQgbGFiZWwgaW5mb3JtYXRpb25cbiAgICBub2RlT2JqLmxhYmVsID0gKGVsZS5sYWJlbCAmJiBlbGUubGFiZWwudGV4dCkgfHwgdW5kZWZpbmVkO1xuICAgIGlmKG5vZGVPYmoubGFiZWwgIT0gdW5kZWZpbmVkKXtcbiAgICAgIG5vZGVPYmoubGFiZWwgPSBcIlwiKyBub2RlT2JqLmxhYmVsO1xuICAgIH1cbiAgICAvLyBhZGQgc3RhdGUgYW5kIGluZm8gYm94IGluZm9ybWF0aW9uXG4gICAgbm9kZU9iai5zdGF0ZXNhbmRpbmZvcyA9IHNlbGYuc3RhdGVBbmRJbmZvUHJvcChlbGUsIG5vZGVPYmopO1xuICAgIC8vIGFkZGluZyBwYXJlbnQgaW5mb3JtYXRpb25cbiAgICBzZWxmLmFkZFBhcmVudEluZm9Ub05vZGUoZWxlLCBub2RlT2JqLCBwYXJlbnQsIGNvbXBhcnRtZW50cyk7XG5cblxuICAgIC8vIGFkZCBsYW5ndWFnZSBpbmZvLCB0aGlzIHdpbGwgYWx3YXlzIGJlIHRoZSBtYXBUeXBlIGlmIG5vdCBoeWJyaWRcbiAgICB2YXIgbWFwVHlwZSA9IGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZTtcbiAgICBpZihtYXBUeXBlID09ICdQRCcgfHwgbWFwVHlwZSA9PSAnQUYnIHx8IG1hcFR5cGUgPT0gJ1NJRicpe1xuICAgICAgbm9kZU9iai5sYW5ndWFnZSA9IGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZTtcbiAgICB9ZWxzZSBpZihtYXBUeXBlID09ICdIeWJyaWRTYmduJyl7XG4gICAgICBpZihub2RlT2JqLmNsYXNzID09ICdkZWxheScgfHwgbm9kZU9iai5jbGFzcy5zdGFydHNXaXRoKFwiQkFcIikpe1xuICAgICAgICBub2RlT2JqLmxhbmd1YWdlID0gJ0FGJztcbiAgICAgIH1lbHNle1xuICAgICAgICBub2RlT2JqLmxhbmd1YWdlID0gJ1BEJztcbiAgICAgIH1cbiAgICB9ZWxzZXsvL21hcHR5cGUgPT0gSHlicmlkQW55XG4gICAgICBpZihub2RlT2JqLmNsYXNzLnN0YXJ0c1dpdGgoXCJTSUZcIikpe1xuICAgICAgICBub2RlT2JqLmxhbmd1YWdlID0gJ1NJRic7XG4gICAgICB9ZWxzZSBpZihub2RlT2JqLmNsYXNzID09ICdkZWxheScgfHwgbm9kZU9iai5jbGFzcy5zdGFydHNXaXRoKFwiQkFcIikpe1xuICAgICAgICBub2RlT2JqLmxhbmd1YWdlID0gJ0FGJztcbiAgICAgIH1lbHNle1xuICAgICAgICBub2RlT2JqLmxhbmd1YWdlID0gJ1BEJztcbiAgICAgIH1cbiAgICB9XG4gICBcbiAgICAvLyBhZGQgZGVmYXVsdCBwcm9wZXJ0aWVzIG9mIHRoZSBub2RlIHR5cGUgdG8gZWxlbWVudCBkYXRhXG4gICAgLy8gdGhlc2UgcHJvcHMgd291bGQgYmUgb3ZlcnJpZGVuIGJ5IHN0eWxlIHByb3BlcnRpZXMgb2YgZWxlbWVudFxuICAgIC8vIHN0b3JlZCBpbiB0aGUgZmlsZVxuICAgIGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kTm9kZURhdGFXaXRoQ2xhc3NEZWZhdWx0cyggbm9kZU9iaiwgbm9kZU9iai5jbGFzcyApO1xuXG4gICAgLy8gYWRkIGNsb25lIGluZm9ybWF0aW9uXG4gICAgaWYgKGVsZS5jbG9uZSkge1xuICAgICAgbm9kZU9iai5jbG9uZW1hcmtlciA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGVPYmouY2xvbmVtYXJrZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gYWRkIHBvcnQgaW5mb3JtYXRpb25cbiAgICB2YXIgcG9ydHMgPSBbXTtcbiAgICB2YXIgcG9ydEVsZW1lbnRzID0gZWxlLnBvcnRzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwb3J0RWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwb3J0RWwgPSBwb3J0RWxlbWVudHNbaV07XG4gICAgICB2YXIgaWQgPSBwb3J0RWwuaWQ7XG4gICAgICB2YXIgcmVsYXRpdmVYUG9zID0gcGFyc2VGbG9hdChwb3J0RWwueCkgLSBub2RlT2JqLmJib3gueDtcbiAgICAgIHZhciByZWxhdGl2ZVlQb3MgPSBwYXJzZUZsb2F0KHBvcnRFbC55KSAtIG5vZGVPYmouYmJveC55O1xuXG4gICAgICByZWxhdGl2ZVhQb3MgPSByZWxhdGl2ZVhQb3MgLyBwYXJzZUZsb2F0KG5vZGVPYmouYmJveC53KSAqIDEwMDtcbiAgICAgIHJlbGF0aXZlWVBvcyA9IHJlbGF0aXZlWVBvcyAvIHBhcnNlRmxvYXQobm9kZU9iai5iYm94LmgpICogMTAwO1xuICAgICAgXG4gICAgICAvLyBJbiBjYXNlIHBvcnQgcG9zaXRpb24gaXMgbm90IHZlcnRpY2FsbHkvaG9yaXpvbnRhbGx5IGFsaWduZWQgd2l0aCB0aGUgbm9kZSBjZW50ZXIsIGRlY2lkZSBhIGRpcmVjdGlvblxuICAgICAgaWYoTWF0aC5hYnMocmVsYXRpdmVYUG9zKSA+IDAgJiYgTWF0aC5hYnMocmVsYXRpdmVZUG9zKSA+IDApIHtcbiAgICAgICAgaWYoTWF0aC5hYnMocmVsYXRpdmVYUG9zKSA+PSBNYXRoLmFicyhyZWxhdGl2ZVlQb3MpKVxuICAgICAgICAgIHJlbGF0aXZlWVBvcyA9IDA7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZWxhdGl2ZVhQb3MgPSAwO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCBwb3J0cyBhcmUgbm90IGluc2lkZSB0aGUgbm9kZSBzaGFwZS5cbiAgICAgIC8vIFRoZXJlZm9yZSwgYWJzLiB2YWx1ZSBvZiB0aGVpciByZWxhdGl2ZSB4IGFuZCB5IGNvb3JkaW5hdGVzIChyZWxhdGl2ZSB0byBub2RlIGNlbnRlcikgc2hvdWxkIGJlIGJpZ2dlciB0aGFuIDUwLlxuICAgICAgaWYgKE1hdGguYWJzKHJlbGF0aXZlWFBvcykgPCA1MCkge1xuICAgICAgICByZWxhdGl2ZVhQb3MgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMocmVsYXRpdmVZUG9zKSA8IDUwKSB7XG4gICAgICAgIHJlbGF0aXZlWVBvcyA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWxhdGl2ZVhQb3MgPT09IDAgJiYgcmVsYXRpdmVZUG9zID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBJZiBwb3J0IGxlbmd0aCBpcyBsb25nZXIgdGhhbiB0aGUgbm9kZSBzaXplIChmb3IgZXhhbXBsZSwgc29tZSBzYmduIGZpbGVzIGdlbmVyYXRlZCBmcm9tIFJlYWN0b21lIGRhdGFiYXNlIGhhcyB2ZXJ5IGxvbmcgcG9ydHMpLFxuICAgICAgLy8gc2V0IHRoZSBwb3J0IGxlbmd0aCB0byA3MCB3aGljaCBpcyBkZWZhdWx0IGluIHNiZ252aXpcbiAgICAgIGlmKE1hdGguYWJzKHJlbGF0aXZlWFBvcykgPiAxNTAgfHwgTWF0aC5hYnMocmVsYXRpdmVZUG9zKSA+IDE1MCkge1xuICAgICAgICBpZihNYXRoLmFicyhyZWxhdGl2ZVhQb3MpID4gMTUwKVxuICAgICAgICAgIHJlbGF0aXZlWFBvcyA9IHJlbGF0aXZlWFBvcyAvIE1hdGguYWJzKHJlbGF0aXZlWFBvcykgKiA3MDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJlbGF0aXZlWVBvcyA9IHJlbGF0aXZlWVBvcyAvIE1hdGguYWJzKHJlbGF0aXZlWVBvcykgKiA3MDtcbiAgICAgIH0gICAgICBcblxuICAgICAgcG9ydHMucHVzaCh7XG4gICAgICAgIGlkOiBpZCxcbiAgICAgICAgeDogcmVsYXRpdmVYUG9zLFxuICAgICAgICB5OiByZWxhdGl2ZVlQb3NcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG5vZGVPYmoucG9ydHMgPSBwb3J0cztcblxuICAgIHZhciBfY2xhc3MgPSBub2RlT2JqLmNsYXNzO1xuICAgIC8vIElmIHRoZSBub2RlIGNhbiBoYXZlIHBvcnRzIGFuZCBpdCBoYXMgZXhhY3RseSAyIHBvcnRzIHRoZW4gaXQgc2hvdWxkIGJlIHJlcHJlc2VudGVkIGJ5IGEgYmlnZ2VyIGJib3guXG4gICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIHJlcHJlc2VudCBpdCBhcyBhIHBvbHlnb24gYW5kIHNvIHRoZSB3aG9sZSBzaGFwZSBpbmNsdWRpbmcgdGhlIHBvcnRzIGFyZSByZW5kZXJlZCBpbiB0aGUgbm9kZSBiYm94LlxuICAgIGlmIChlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVQb3J0cyhfY2xhc3MpKSB7XG4gICAgICBpZiAoZ3JhcGhVdGlsaXRpZXMucG9ydHNFbmFibGVkICYmIHBvcnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgcG9ydHMgYXJlIHN5bW1ldHJpYyB0byB0aGUgbm9kZSBjZW50ZXIgc28gdXNpbmcganVzdCBvbmUgb2YgdGhlIHBvcnRzIGlzIGVub3VnaFxuICAgICAgICB2YXIgcG9ydCA9IHBvcnRzWzBdO1xuICAgICAgICB2YXIgb3JpZW50YXRpb24gPSBwb3J0LnggPT09IDAgPyAndmVydGljYWwnIDogJ2hvcml6b250YWwnO1xuICAgICAgICAvLyBUaGlzIGlzIHRoZSByYXRpbyBvZiB0aGUgYXJlYSBvY2N1cGllZCB3aXRoIHBvcnRzIG92ZXIgd2l0aG91dCBwb3J0c1xuICAgICAgICB2YXIgcmF0aW8gPSBvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IE1hdGguYWJzKHBvcnQueSkgLyA1MCA6IE1hdGguYWJzKHBvcnQueCkgLyA1MDtcbiAgICAgICAgLy8gTXVsdGlwbHkgdGhlIGJib3ggd2l0aCB0aGUgY2FsY3VsYXRlZCByYXRpb1xuICAgICAgICBub2RlT2JqLmJib3gudyA9IHBhcnNlRmxvYXQobm9kZU9iai5iYm94LncpICogcmF0aW87XG4gICAgICAgIG5vZGVPYmouYmJveC5oID0gcGFyc2VGbG9hdChub2RlT2JqLmJib3guaCkgKiByYXRpbztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxlLmV4dGVuc2lvbiAmJiBlbGUuZXh0ZW5zaW9uLmhhcygnYW5ub3RhdGlvbicpKSB7IC8vIGFubm90YXRpb24gZXh0ZW5zaW9uIHdhcyBmb3VuZFxuICAgICAgdmFyIHJkZkVsZW1lbnQgPSBlbGUuZXh0ZW5zaW9uLmdldCgnYW5ub3RhdGlvbicpLnJkZkVsZW1lbnQ7XG4gICAgICBub2RlT2JqID0gc2VsZi5oYW5kbGVBbm5vdGF0aW9ucyhub2RlT2JqLCByZGZFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZWxlLmV4dGVuc2lvbiAmJiBlbGUuZXh0ZW5zaW9uLmhhcyhcInNiZ252aXpcIikpe1xuICAgICAgcGFyc2VTdHJpbmcoZWxlLmV4dGVuc2lvbi5nZXQoXCJzYmdudml6XCIpLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5zYmdudml6LmhpZGRlbil7XG4gICAgICAgICAgc3R5bGVPYmouZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuc2JnbnZpei5oYXNIaWRkZW5OZWlnaGJvdXIpe1xuICAgICAgICAgIG5vZGVPYmoudGhpY2tCb3JkZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuc2JnbnZpei5jb2xsYXBzZWQpe1xuICAgICAgICAgIG5vZGVPYmoucG9zaXRpb25CZWZvcmVTYXZpbmcgPSB7eCA6IE51bWJlcihyZXN1bHQuc2JnbnZpei5wb3NpdGlvbkJlZm9yZVNhdmluZ1swXS4kLngpLFxuICAgICAgICAgICAgICB5OiBOdW1iZXIocmVzdWx0LnNiZ252aXoucG9zaXRpb25CZWZvcmVTYXZpbmdbMF0uJC55KX07XG4gICAgICAgICAgbm9kZU9iai5jb2xsYXBzZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBjeXRvc2NhcGVKc05vZGUgPSB7ZGF0YTogbm9kZU9iaiwgc3R5bGU6IHN0eWxlT2JqfTtcbiAgICBqc29uQXJyYXkucHVzaChjeXRvc2NhcGVKc05vZGUpO1xuICB9O1xuXG4gIC8qKlxuICAqIGdpdmVuIGEgZnV0dXJlIGN5IG9iamVjdCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQncyBsaWJzYmduanMnIGV4dGVuc2lvbiwgcG9wdWxhdGVzIHRoZSBhbm5vdGF0aW9ucyBmaWVsZFxuICAqL1xuICBzYmdubWxUb0pzb24uaGFuZGxlQW5ub3RhdGlvbnMgPSBmdW5jdGlvbihjeU9iamVjdCwgcmRmRWxlbWVudCkge1xuICAgIC8vIGxvY2FsIHV0aWxpdHkgZnVuY3Rpb25cbiAgICBmdW5jdGlvbiBkYkZyb21VcmwodXJsKSB7XG4gICAgICB2YXIgcmVnZXhwID0gL15odHRwOlxcL1xcL2lkZW50aWZpZXJzLm9yZ1xcLyguKz8pXFwvLiskLztcbiAgICAgIHJldHVybiB1cmwucmVwbGFjZShyZWdleHAsICckMScpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbGxFbGVtZW50RGF0YUFubm90YXRpb24oY3lPYmplY3QsIGFubm90YXRpb25JbmRleCwgc3RhdHVzLCBzZWxlY3RlZERCLCBzZWxlY3RlZFJlbGF0aW9uLCBhbm5vdGF0aW9uVmFsdWUpIHtcbiAgICAgIGlmKCFjeU9iamVjdC5hbm5vdGF0aW9ucykge1xuICAgICAgICBjeU9iamVjdC5hbm5vdGF0aW9ucyA9IHt9O1xuICAgICAgfVxuICAgICAgdmFyIGFubm90SWQgPSBjeU9iamVjdC5pZCtcIi1hbm5vdC1cIithbm5vdGF0aW9uSW5kZXg7XG5cbiAgICAgIGN5T2JqZWN0LmFubm90YXRpb25zW2Fubm90SWRdID0ge1xuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIG1heSBiZSBoYXphcmRvdXMuIEJ1dCBzZXR0aW5nIGl0IGFzIHVuY2hlY2tlZCBsZWF2ZSB0aGUgYW5ub3RhdGlvbiBvdXQgaWYgdGhlIGZpbGUgaXMgc2F2ZWQuXG4gICAgICAgIC8vIFRoaXMgd291bGQgbGVhZCB0byB0aGUgdXNlciBsb3NpbmcgYW5ub3RhdGlvbnMgd2l0aG91dCBrbm93aW5nIGl0LlxuICAgICAgICBzdGF0dXM6IHN0YXR1cywgLy8gPC0tIHdlIHRydXN0IHRoYXQgd2hhdCdzIGJlZW4gbG9hZGVkIGlzIHZhbGlkLlxuICAgICAgICBzZWxlY3RlZERCOiBzZWxlY3RlZERCLFxuICAgICAgICBzZWxlY3RlZFJlbGF0aW9uOiBzZWxlY3RlZFJlbGF0aW9uLFxuICAgICAgICBhbm5vdGF0aW9uVmFsdWU6IGFubm90YXRpb25WYWx1ZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBjeU9iamVjdDtcbiAgICB9XG5cbiAgICAvLyB3ZSBhc3N1bWUgdGhhdCB0aGUgaWQgb2YgdGhlIHJkZjphYm91dCBmaWVsZCBpcyB0aGUgb25lIG9mIHRoZSBjdXJyZW50IG5vZGUsIGFuZCB0aGF0IHRoZXJlJ3Mgb25seSAxIGRlc2NyaXB0aW9uXG4gICAgdmFyIGlkID0gcmRmRWxlbWVudC5nZXRBbGxJZHMoKVswXTtcbiAgICB2YXIgcmVzb3VyY2VzID0gcmRmRWxlbWVudC5nZXRSZXNvdXJjZXNPZklkKGlkKTtcbiAgICB2YXIgY3VzdG9tUHJvcGVydGllcyA9IHJkZkVsZW1lbnQuZ2V0Q3VzdG9tUHJvcGVydGllc09mSWQoaWQpO1xuXG4gICAgdmFyIGdsb2JhbEFubm90SW5kZXggPSAwO1xuICAgIC8vIGhhbmRsZSBjb250cm9sbGVkIHByb3BlcnRpZXNcbiAgICBmb3IgKHZhciBmdWxsUXVhbGlmaWVyIGluIHJlc291cmNlcykge1xuICAgICAgdmFyIHJlbGF0aW9uID0gbGlic2JnbmpzLmFubm90LlV0aWwucmVkdWNlUHJlZml4KGZ1bGxRdWFsaWZpZXIpO1xuICAgICAgZm9yKHZhciBpPTA7IGk8cmVzb3VyY2VzW2Z1bGxRdWFsaWZpZXJdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc291cmNlc1tmdWxsUXVhbGlmaWVyXVtpXTtcbiAgICAgICAgdmFyIHNlbGVjdGVkREIgPSBkYkZyb21VcmwodmFsdWUpO1xuICAgICAgICBjeU9iamVjdCA9IGZpbGxFbGVtZW50RGF0YUFubm90YXRpb24oY3lPYmplY3QsIGdsb2JhbEFubm90SW5kZXgsIFwidmFsaWRhdGVkXCIsIHNlbGVjdGVkREIsIHJlbGF0aW9uLCB2YWx1ZSk7XG4gICAgICAgIGdsb2JhbEFubm90SW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gaGFuZGxlIGN1c3RvbSBwcm9wZXJ0aWVzXG4gICAgZm9yICh2YXIga2V5IGluIGN1c3RvbVByb3BlcnRpZXMpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGN1c3RvbVByb3BlcnRpZXNba2V5XTtcbiAgICAgIGN5T2JqZWN0ID0gZmlsbEVsZW1lbnREYXRhQW5ub3RhdGlvbihjeU9iamVjdCwgZ2xvYmFsQW5ub3RJbmRleCwgXCJ2YWxpZGF0ZWRcIiwga2V5LCBcInNpbzpTSU9fMDAwMjIzXCIsIHZhbHVlKTtcbiAgICAgIGdsb2JhbEFubm90SW5kZXgrKztcbiAgICB9XG5cbiAgICByZXR1cm4gY3lPYmplY3Q7XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLnRyYXZlcnNlTm9kZXMgPSBmdW5jdGlvbiAoZWxlLCBqc29uQXJyYXksIHBhcmVudCwgY29tcGFydG1lbnRzKSB7XG4gICAgdmFyIGVsSWQgPSBlbGUuaWQ7IFxuICAgIGlmICghaGFuZGxlZEVsZW1lbnRzW2VsZS5jbGFzc19dKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5zZXJ0ZWROb2Rlc1tlbElkXSA9IHRydWU7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vIGFkZCBjb21wbGV4IG5vZGVzIGhlcmVcblxuICAgIHZhciBlbGVDbGFzcyA9IGVsZS5jbGFzc187XG5cbiAgICBpZiAoZWxlQ2xhc3MgPT09ICdjb21wbGV4JyB8fCBlbGVDbGFzcyA9PT0gJ2NvbXBsZXggbXVsdGltZXInIHx8IGVsZUNsYXNzID09PSAnc3VibWFwJyB8fCBlbGVDbGFzcyA9PT0gJ3RvcG9sb2d5IGdyb3VwJykge1xuICAgICAgc2VsZi5hZGRDeXRvc2NhcGVKc05vZGUoZWxlLCBqc29uQXJyYXksIHBhcmVudCwgY29tcGFydG1lbnRzKTtcblxuICAgICAgdmFyIGNoaWxkR2x5cGhzID0gZWxlLmdseXBoTWVtYmVycztcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRHbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGdseXBoID0gY2hpbGRHbHlwaHNbaV07XG4gICAgICAgIHZhciBnbHlwaENsYXNzID0gZ2x5cGguY2xhc3NfO1xuICAgICAgICBpZiAoZ2x5cGhDbGFzcyAhPT0gJ3N0YXRlIHZhcmlhYmxlJyAmJiBnbHlwaENsYXNzICE9PSAndW5pdCBvZiBpbmZvcm1hdGlvbicpIHtcbiAgICAgICAgICBpZiAoZ2x5cGguY29tcGFydG1lbnRSZWYgJiYgZ2x5cGguY29tcGFydG1lbnRSZWYgIT0gZWxJZCAmJiBlbGVDbGFzcyA9PSAnc3VibWFwJykge1xuICAgICAgICAgICAgc2VsZi50cmF2ZXJzZU5vZGVzKGdseXBoLCBqc29uQXJyYXksIGdseXBoLmNvbXBhcnRtZW50UmVmLCBjb21wYXJ0bWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYudHJhdmVyc2VOb2RlcyhnbHlwaCwganNvbkFycmF5LCBlbElkLCBjb21wYXJ0bWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLmFkZEN5dG9zY2FwZUpzTm9kZShlbGUsIGpzb25BcnJheSwgcGFyZW50LCBjb21wYXJ0bWVudHMpO1xuICAgIH1cbiAgfTtcblxuICBzYmdubWxUb0pzb24uZ2V0UG9ydHMgPSBmdW5jdGlvbiAoeG1sT2JqZWN0KSB7XG4gICAgcmV0dXJuICggeG1sT2JqZWN0Ll9jYWNoZWRQb3J0cyA9IHhtbE9iamVjdC5fY2FjaGVkUG9ydHMgfHwgeG1sT2JqZWN0LnF1ZXJ5U2VsZWN0b3JBbGwoJ3BvcnQnKSk7XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmdldEdseXBocyA9IGZ1bmN0aW9uICh4bWxPYmplY3QpIHtcbiAgICB2YXIgZ2x5cGhzID0geG1sT2JqZWN0Ll9jYWNoZWRHbHlwaHM7XG5cbiAgICBpZiAoIWdseXBocykge1xuICAgICAgZ2x5cGhzID0geG1sT2JqZWN0Ll9jYWNoZWRHbHlwaHMgPSB4bWxPYmplY3QuX2NhY2hlZEdseXBocyB8fCB4bWxPYmplY3QucXVlcnlTZWxlY3RvckFsbCgnZ2x5cGgnKTtcblxuICAgICAgdmFyIGlkMmdseXBoID0geG1sT2JqZWN0Ll9pZDJnbHlwaCA9IHt9O1xuXG4gICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKysgKSB7XG4gICAgICAgIHZhciBnID0gZ2x5cGhzW2ldO1xuICAgICAgICB2YXIgaWQgPSBnLmdldEF0dHJpYnV0ZSgnaWQnKTtcblxuICAgICAgICBpZDJnbHlwaFsgaWQgXSA9IGc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGdseXBocztcbiAgfTtcblxuICBzYmdubWxUb0pzb24uZ2V0QXJjcyA9IGZ1bmN0aW9uICh4bWxPYmplY3QpIHtcbiAgICB2YXIgYXJjcyA9IHhtbE9iamVjdC5fY2FjaGVkQXJjcztcblxuICAgIGlmICghYXJjcykge1xuICAgICAgYXJjcyA9IHhtbE9iamVjdC5fY2FjaGVkQXJjcyA9IHhtbE9iamVjdC5fY2FjaGVkQXJjcyB8fCB4bWxPYmplY3QucXVlcnlTZWxlY3RvckFsbCgnYXJjJyk7XG5cbiAgICAgIHZhciBpZDJhcmMgPSB4bWxPYmplY3QuX2lkMmFyYyA9IHt9O1xuXG4gICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBhcmNzLmxlbmd0aDsgaSsrICkge1xuICAgICAgICB2YXIgYXJjID0gYXJjc1tpXTtcbiAgICAgICAgdmFyIGlkID0gYXJjLmdldEF0dHJpYnV0ZSgnaWQnKTtcblxuICAgICAgICBpZDJhcmNbIGlkIF0gPSBhcmM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyY3M7XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmdldEdseXBoQnlJZCA9IGZ1bmN0aW9uICh4bWxPYmplY3QsIGlkKSB7XG4gICAgdGhpcy5nZXRHbHlwaHMoeG1sT2JqZWN0KTsgLy8gbWFrZSBzdXJlIGNhY2hlIGlzIGJ1aWx0XG5cbiAgICByZXR1cm4geG1sT2JqZWN0Ll9pZDJnbHlwaFtpZF07XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmdldEFyY0J5SWQgPSBmdW5jdGlvbiAoeG1sT2JqZWN0LCBpZCkge1xuICAgIHRoaXMuZ2V0QXJjcyh4bWxPYmplY3QpOyAvLyBtYWtlIHN1cmUgY2FjaGUgaXMgYnVpbHRcblxuICAgIHJldHVybiB4bWxPYmplY3QuX2lkMmFyY1tpZF07XG4gIH07XG5cbiAgc2Jnbm1sVG9Kc29uLmdldEFyY1NvdXJjZUFuZFRhcmdldCA9IGZ1bmN0aW9uIChhcmMsIHhtbE9iamVjdCkge1xuICAgIC8vIHNvdXJjZSBhbmQgdGFyZ2V0IGNhbiBiZSBpbnNpZGUgb2YgYSBwb3J0XG4gICAgdmFyIHNvdXJjZSA9IGFyYy5zb3VyY2U7XG4gICAgdmFyIHRhcmdldCA9IGFyYy50YXJnZXQ7XG4gICAgdmFyIHNvdXJjZU5vZGVJZDtcbiAgICB2YXIgdGFyZ2V0Tm9kZUlkO1xuXG4gICAgdmFyIHNvdXJjZUV4aXN0cyA9IHRoaXMuZ2V0R2x5cGhCeUlkKHhtbE9iamVjdCwgc291cmNlKTtcbiAgICB2YXIgdGFyZ2V0RXhpc3RzID0gdGhpcy5nZXRHbHlwaEJ5SWQoeG1sT2JqZWN0LCB0YXJnZXQpO1xuXG4gICAgaWYgKHNvdXJjZUV4aXN0cykge1xuICAgICAgc291cmNlTm9kZUlkID0gc291cmNlO1xuICAgIH1cblxuICAgIGlmICh0YXJnZXRFeGlzdHMpIHtcbiAgICAgIHRhcmdldE5vZGVJZCA9IHRhcmdldDtcbiAgICB9XG5cblxuICAgIHZhciBpO1xuICAgIHZhciBwb3J0RWxzID0gdGhpcy5nZXRQb3J0cyh4bWxPYmplY3QpO1xuICAgIHZhciBwb3J0O1xuICAgIGlmIChzb3VyY2VOb2RlSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IHBvcnRFbHMubGVuZ3RoOyBpKysgKSB7XG4gICAgICAgIHBvcnQgPSBwb3J0RWxzW2ldO1xuICAgICAgICBpZiAocG9ydC5nZXRBdHRyaWJ1dGUoJ2lkJykgPT09IHNvdXJjZSkge1xuICAgICAgICAgIHNvdXJjZU5vZGVJZCA9IHBvcnQucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0Tm9kZUlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBwb3J0RWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHBvcnQgPSBwb3J0RWxzW2ldO1xuICAgICAgICBpZiAocG9ydC5nZXRBdHRyaWJ1dGUoJ2lkJykgPT09IHRhcmdldCkge1xuICAgICAgICAgIHRhcmdldE5vZGVJZCA9IHBvcnQucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geydzb3VyY2UnOiBzb3VyY2VOb2RlSWQsICd0YXJnZXQnOiB0YXJnZXROb2RlSWR9O1xuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5nZXRBcmNBbmNob3JQb2ludFBvc2l0aW9ucyA9IGZ1bmN0aW9uIChlbGUpIHtcbiAgICB2YXIgYW5jaG9yUG9pbnRQb3NpdGlvbnMgPSBbXTtcblxuICAgIHZhciBjaGlsZHJlbiA9IGVsZS5uZXh0cztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwb3NYID0gY2hpbGRyZW5baV0ueDtcbiAgICAgIHZhciBwb3NZID0gY2hpbGRyZW5baV0ueTtcblxuICAgICAgYW5jaG9yUG9pbnRQb3NpdGlvbnMucHVzaCh7XG4gICAgICAgIHg6IHBvc1gsXG4gICAgICAgIHk6IHBvc1lcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNob3JQb2ludFBvc2l0aW9ucztcbiAgfTtcblxuICBzYmdubWxUb0pzb24uYWRkQ3l0b3NjYXBlSnNFZGdlID0gZnVuY3Rpb24gKGVsZSwganNvbkFycmF5LCB4bWxPYmplY3QpIHtcbiAgICBpZiAoIWhhbmRsZWRFbGVtZW50c1tlbGUuY2xhc3NfXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgc291cmNlQW5kVGFyZ2V0ID0gc2VsZi5nZXRBcmNTb3VyY2VBbmRUYXJnZXQoZWxlLCB4bWxPYmplY3QpO1xuXG4gICAgaWYgKCF0aGlzLmluc2VydGVkTm9kZXNbc291cmNlQW5kVGFyZ2V0LnNvdXJjZV0gfHwgIXRoaXMuaW5zZXJ0ZWROb2Rlc1tzb3VyY2VBbmRUYXJnZXQudGFyZ2V0XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBlZGdlT2JqID0ge307XG4gICAgdmFyIHN0eWxlT2JqID0ge307XG4gICAgdmFyIGFuY2hvclBvaW50UG9zaXRpb25zID0gW107XG4gICAgaWYgKHNvdXJjZUFuZFRhcmdldC5zb3VyY2UgIT09IHNvdXJjZUFuZFRhcmdldC50YXJnZXQpIHtcbiAgICAgIGFuY2hvclBvaW50UG9zaXRpb25zID0gc2VsZi5nZXRBcmNBbmNob3JQb2ludFBvc2l0aW9ucyhlbGUpO1xuICAgIH1cblxuICAgIGVkZ2VPYmouaWQgPSBlbGUuaWQgfHwgdW5kZWZpbmVkO1xuICAgIGVkZ2VPYmouY2xhc3MgPSBlbGUuY2xhc3NfO1xuXG4gICAgLy8gYmV6aWVyIGVkZ2UgaXMgdGhlIGRlZmF1bHQgZWRnZSBzdHlsZVxuICAgIC8vIGNoYW5nZSBpZiB0aGUgZmlsZSBiZWluZyBsb2FkZWQgaGFzIGN1cnZlU3R5bGUgZmllbGRcbiAgICB2YXIgY3VydmVTdHlsZSA9IFwiYmV6aWVyXCI7XG4gICAgaWYgKGVsZS5leHRlbnNpb24gJiYgZWxlLmV4dGVuc2lvbi5oYXMoXCJjdXJ2ZVN0eWxlXCIpKSB7XG4gICAgICBwYXJzZVN0cmluZyhlbGUuZXh0ZW5zaW9uLmdldChcImN1cnZlU3R5bGVcIiksIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICBjdXJ2ZVN0eWxlID0gcmVzdWx0LmN1cnZlU3R5bGU7XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAoY3VydmVTdHlsZSA9PSBcInVuYnVuZGxlZC1iZXppZXJcIikge1xuICAgICAgZWRnZU9iai5jb250cm9sUG9pbnRQb3NpdGlvbnMgPSBhbmNob3JQb2ludFBvc2l0aW9ucztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBlZGdlT2JqLmJlbmRQb2ludFBvc2l0aW9ucyA9IGFuY2hvclBvaW50UG9zaXRpb25zO1xuICAgIH1cblxuICAgIHZhciBpc1NpZk1ldGFFZGdlO1xuICAgIGlmIChlbGUuZXh0ZW5zaW9uICYmIGVsZS5leHRlbnNpb24uaGFzKFwic2lmTWV0YUVkZ2VcIikpIHtcbiAgICAgIHBhcnNlU3RyaW5nKGVsZS5leHRlbnNpb24uZ2V0KFwic2lmTWV0YUVkZ2VcIiksIGZ1bmN0aW9uIChlcnIsIHJlc3VsdCkge1xuICAgICAgICBpc1NpZk1ldGFFZGdlID0gcmVzdWx0LnNpZk1ldGFFZGdlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChpc1NpZk1ldGFFZGdlKSB7XG4gICAgICBlZGdlT2JqW1wic2lmLW1ldGFcIl0gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGFkZCBsYW5ndWFnZSBpbmZvLCB0aGlzIHdpbGwgYWx3YXlzIGJlIHRoZSBtYXBUeXBlIGlmIG5vdCBoeWJyaWRcbiAgICB2YXIgUGRFZGdlcyA9IFtcImNvbnN1bXB0aW9uXCIsXCJwcm9kdWN0aW9uXCIsXCJtb2R1bGF0aW9uXCIsXCJzdGltdWxhdGlvblwiLFwiY2F0YWx5c2lzXCIsXCJpbmhpYml0aW9uXCIsXCJuZWNlc3Nhcnkgc3RpbXVsYXRpb25cIixcImxvZ2ljIGFyY1wiLFwiZXF1aXZhbGVuY2UgYXJjXCJdO1xuICAgIHZhciBBZkVkZ2VzID0gW1wicG9zaXRpdmUgaW5mbHVlbmNlXCIsXCJuZWdhdGl2ZSBpbmZsdWVuY2VcIixcInVua25vd24gaW5mbHVlbmNlXCJdOyAgXG4gICAgdmFyIG1hcFR5cGUgPSBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGU7XG4gICAgaWYobWFwVHlwZSA9PSAnUEQnIHx8IG1hcFR5cGUgPT0gJ0FGJyB8fCBtYXBUeXBlID09ICdTSUYnKXtcbiAgICAgIGVkZ2VPYmoubGFuZ3VhZ2UgPSBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGU7XG4gICAgfWVsc2UgaWYobWFwVHlwZSA9PSAnSHlicmlkU2Jnbicpe1xuICAgICAgaWYoUGRFZGdlcy5pbmRleE9mKGVkZ2VPYmouY2xhc3MpID4gLTEpe1xuICAgICAgICBlZGdlT2JqLmxhbmd1YWdlID0gJ1BEJztcbiAgICAgIH1lbHNle1xuICAgICAgICBlZGdlT2JqLmxhbmd1YWdlID0gJ0FGJztcbiAgICAgIH1cbiAgICB9ZWxzZXsvL21hcHR5cGUgPT0gSHlicmlkQW55XG4gICAgICBpZihQZEVkZ2VzLmluZGV4T2YoZWRnZU9iai5jbGFzcykgPiAtMSl7XG4gICAgICAgIGVkZ2VPYmoubGFuZ3VhZ2UgPSAnUEQnO1xuICAgICAgfWVsc2UgaWYoQWZFZGdlcy5pbmRleE9mKGVkZ2VPYmouY2xhc3MpID4gLTEpe1xuICAgICAgICBlZGdlT2JqLmxhbmd1YWdlID0gJ0FGJztcbiAgICAgIH1lbHNle1xuICAgICAgICBlZGdlT2JqLmxhbmd1YWdlID0gJ1NJRic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxlbWVudFV0aWxpdGllcy5leHRlbmRFZGdlRGF0YVdpdGhDbGFzc0RlZmF1bHRzKCBlZGdlT2JqLCBlZGdlT2JqLmNsYXNzICk7XG5cbiAgICBlZGdlT2JqLmNhcmRpbmFsaXR5ID0gMDtcbiAgICBpZiAoZWxlLmdseXBocy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsZS5nbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGVsZS5nbHlwaHNbaV0uY2xhc3NfID09PSAnY2FyZGluYWxpdHknIHx8IGVsZS5nbHlwaHNbaV0uY2xhc3NfID09PSAnc3RvaWNoaW9tZXRyeScpIHtcbiAgICAgICAgICB2YXIgbGFiZWwgPSBlbGUuZ2x5cGhzW2ldLmxhYmVsO1xuICAgICAgICAgIGVkZ2VPYmouY2FyZGluYWxpdHkgPSBsYWJlbC50ZXh0IHx8IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGVkZ2VPYmouc291cmNlID0gc291cmNlQW5kVGFyZ2V0LnNvdXJjZTtcbiAgICBlZGdlT2JqLnRhcmdldCA9IHNvdXJjZUFuZFRhcmdldC50YXJnZXQ7XG5cbiAgICBlZGdlT2JqLnBvcnRzb3VyY2UgPSBlbGUuc291cmNlO1xuICAgIGVkZ2VPYmoucG9ydHRhcmdldCA9IGVsZS50YXJnZXQ7XG5cbiAgICBpZiAoZWxlLmV4dGVuc2lvbiAmJiBlbGUuZXh0ZW5zaW9uLmhhcygnYW5ub3RhdGlvbicpKSB7IC8vIGFubm90YXRpb24gZXh0ZW5zaW9uIHdhcyBmb3VuZFxuICAgICAgdmFyIHJkZkVsZW1lbnQgPSBlbGUuZXh0ZW5zaW9uLmdldCgnYW5ub3RhdGlvbicpLnJkZkVsZW1lbnQ7XG4gICAgICBlZGdlT2JqID0gc2VsZi5oYW5kbGVBbm5vdGF0aW9ucyhlZGdlT2JqLCByZGZFbGVtZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZWxlLmV4dGVuc2lvbiAmJiBlbGUuZXh0ZW5zaW9uLmhhcyhcInNiZ252aXpcIikpe1xuICAgICAgcGFyc2VTdHJpbmcoZWxlLmV4dGVuc2lvbi5nZXQoXCJzYmdudml6XCIpLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5zYmdudml6LmhpZGRlbil7XG4gICAgICAgICAgc3R5bGVPYmouZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgY3l0b3NjYXBlSnNFZGdlID0ge2RhdGE6IGVkZ2VPYmosIHN0eWxlOiBzdHlsZU9ian07XG4gICAganNvbkFycmF5LnB1c2goY3l0b3NjYXBlSnNFZGdlKTtcbiAgfTtcblxuICBzYmdubWxUb0pzb24uYXBwbHlTdHlsZSA9IGZ1bmN0aW9uIChyZW5kZXJJbmZvcm1hdGlvbiwgbm9kZXMsIGVkZ2VzKSB7XG4gICAgLy8gZ2V0IGFsbCBjb2xvciBpZCByZWZlcmVuY2VzIHRvIHRoZWlyIHZhbHVlXG4gICAgaWYgKHJlbmRlckluZm9ybWF0aW9uLmxpc3RPZkNvbG9yRGVmaW5pdGlvbnMpIHtcbiAgICAgIHZhciBjb2xvckxpc3QgPSByZW5kZXJJbmZvcm1hdGlvbi5saXN0T2ZDb2xvckRlZmluaXRpb25zLmNvbG9yRGVmaW5pdGlvbnM7XG4gICAgICB2YXIgY29sb3JJRFRvVmFsdWUgPSB7fTtcbiAgICAgIGZvciAodmFyIGk9MDsgaSA8IGNvbG9yTGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb2xvcklEVG9WYWx1ZVtjb2xvckxpc3RbaV0uaWRdID0gY29sb3JMaXN0W2ldLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBnZXQgYWxsIGJhY2tncm91bmQgaW1hZ2UgaWQgcmVmZXJlbmNlcyB0byB0aGVpciB2YWx1ZVxuICAgIGlmKHJlbmRlckluZm9ybWF0aW9uLmxpc3RPZkJhY2tncm91bmRJbWFnZXMpe1xuICAgICAgdmFyIGltYWdlTGlzdCA9IHJlbmRlckluZm9ybWF0aW9uLmxpc3RPZkJhY2tncm91bmRJbWFnZXMuYmFja2dyb3VuZEltYWdlcztcbiAgICAgIHZhciBpbWFnZUlEVG9WYWx1ZSA9IHt9O1xuICAgICAgZm9yICh2YXIgaT0wOyBpIDwgaW1hZ2VMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGltYWdlSURUb1ZhbHVlW2ltYWdlTGlzdFtpXS5pZF0gPSBpbWFnZUxpc3RbaV0udmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBzdHlsZSBsaXN0IHRvIGVsZW1lbnRJZC1pbmRleGVkIG9iamVjdCBwb2ludGluZyB0byBzdHlsZVxuICAgIC8vIGFsc28gY29udmVydCBjb2xvciByZWZlcmVuY2VzIHRvIGNvbG9yIHZhbHVlc1xuICAgIHZhciBzdHlsZUxpc3QgPSByZW5kZXJJbmZvcm1hdGlvbi5saXN0T2ZTdHlsZXMuc3R5bGVzO1xuICAgIHZhciBtZW1iZXJJRFRvU3R5bGUgPSB7fTtcbiAgICBmb3IgKHZhciBpPTA7IGkgPCBzdHlsZUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlTGlzdFtpXTtcbiAgICAgIHZhciByZW5kZXJHcm91cCA9IHN0eWxlLnJlbmRlckdyb3VwO1xuXG4gICAgICAvLyBjb252ZXJ0IGNvbG9yIHJlZmVyZW5jZXNcbiAgICAgIGlmIChyZW5kZXJHcm91cC5zdHJva2UgIT0gbnVsbCAmJiBjb2xvcklEVG9WYWx1ZSkge1xuICAgICAgICByZW5kZXJHcm91cC5zdHJva2UgPSBjb2xvcklEVG9WYWx1ZVtyZW5kZXJHcm91cC5zdHJva2VdO1xuICAgICAgfVxuICAgICAgaWYgKHJlbmRlckdyb3VwLmZpbGwgIT0gbnVsbCAmJiBjb2xvcklEVG9WYWx1ZSkge1xuICAgICAgICByZW5kZXJHcm91cC5maWxsID0gY29sb3JJRFRvVmFsdWVbcmVuZGVyR3JvdXAuZmlsbF07XG4gICAgICB9XG4gICAgICAvLyBjb252ZXJ0IGJhY2tncm91bmQgaW1hZ2UgcmVmZXJlbmNlc1xuICAgICAgaWYgKHJlbmRlckdyb3VwLmJhY2tncm91bmRJbWFnZSAhPSBudWxsICYmIGltYWdlSURUb1ZhbHVlKSB7XG4gICAgICAgIHJlbmRlckdyb3VwLmJhY2tncm91bmRJbWFnZSA9IGltYWdlSURUb1ZhbHVlW3JlbmRlckdyb3VwLmJhY2tncm91bmRJbWFnZV07XG4gICAgICB9XG5cbiAgICAgIHZhciBpZExpc3QgPSBzdHlsZS5pZExpc3Quc3BsaXQoJyAnKTtcbiAgICAgIGZvciAodmFyIGo9MDsgaiA8IGlkTGlzdC5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgaWQgPSBpZExpc3Rbal07XG4gICAgICAgIG1lbWJlcklEVG9TdHlsZVtpZF0gPSByZW5kZXJHcm91cDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoZXhUb0RlY2ltYWwgKGhleCkge1xuICAgICAgcmV0dXJuIE1hdGgucm91bmQocGFyc2VJbnQoJzB4JytoZXgpIC8gMjU1ICogMTAwKSAvIDEwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0SGV4Q29sb3IgKGhleCkge1xuICAgICAgaWYgKGhleC5sZW5ndGggPT0gNykgeyAvLyBubyBvcGFjaXR5IHByb3ZpZGVkXG4gICAgICAgIHJldHVybiB7b3BhY2l0eTogbnVsbCwgY29sb3I6IGhleH07XG4gICAgICB9XG4gICAgICBlbHNlIHsgLy8gbGVuZ3RoIG9mIDlcbiAgICAgICAgdmFyIGNvbG9yID0gaGV4LnNsaWNlKDAsNyk7XG4gICAgICAgIHZhciBvcGFjaXR5ID0gaGV4VG9EZWNpbWFsKGhleC5zbGljZSgtMikpO1xuICAgICAgICByZXR1cm4ge29wYWNpdHk6IG9wYWNpdHksIGNvbG9yOiBjb2xvcn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5vZGVQcm9wTWFwID0ge1xuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiAnZmlsbCcsXG4gICAgICAnYmFja2dyb3VuZC1vcGFjaXR5JzogJ2JhY2tncm91bmRPcGFjaXR5JyxcbiAgICAgICdib3JkZXItY29sb3InOiAnc3Ryb2tlJyxcbiAgICAgICdib3JkZXItd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICAgICAgJ2ZvbnQtc2l6ZSc6ICdmb250U2l6ZScsXG4gICAgICAnZm9udC1mYW1pbHknOiAnZm9udEZhbWlseScsXG4gICAgICAnZm9udC1zdHlsZSc6ICdmb250U3R5bGUnLFxuICAgICAgJ2ZvbnQtd2VpZ2h0JzogJ2ZvbnRXZWlnaHQnLFxuICAgICAgJ2NvbG9yJzogJ2ZvbnRDb2xvcicsXG4gICAgICAndGV4dC1oYWxpZ24nOiAndGV4dEFuY2hvcicsXG4gICAgICAndGV4dC12YWxpZ24nOiAndnRleHRBbmNob3InLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2UnOiAnYmFja2dyb3VuZEltYWdlJyxcbiAgICAgICdiYWNrZ3JvdW5kLWZpdCc6ICdiYWNrZ3JvdW5kRml0JyxcbiAgICAgICdiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOiAnYmFja2dyb3VuZFBvc1gnLFxuICAgICAgJ2JhY2tncm91bmQtcG9zaXRpb24teSc6ICdiYWNrZ3JvdW5kUG9zWScsXG4gICAgICAnYmFja2dyb3VuZC13aWR0aCc6ICdiYWNrZ3JvdW5kV2lkdGgnLFxuICAgICAgJ2JhY2tncm91bmQtaGVpZ2h0JzogJ2JhY2tncm91bmRIZWlnaHQnLFxuICAgICAgJ2JhY2tncm91bmQtaW1hZ2Utb3BhY2l0eSc6ICdiYWNrZ3JvdW5kSW1hZ2VPcGFjaXR5JyxcbiAgICAgIFxuICAgIH07XG5cbiAgICB2YXIgZWRnZVByb3BNYXAgPSB7XG4gICAgICAnbGluZS1jb2xvcic6ICdzdHJva2UnLFxuICAgICAgJ3dpZHRoJzogJ3N0cm9rZVdpZHRoJ1xuICAgIH07XG5cbiAgICB2YXIgaW5mb2JveFByb3BNYXAgPSB7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6ICdmaWxsJyxcbiAgICAgICdib3JkZXItY29sb3InOiAnc3Ryb2tlJyxcbiAgICAgICdib3JkZXItd2lkdGgnOiAnc3Ryb2tlV2lkdGgnLFxuICAgICAgJ2ZvbnQtc2l6ZSc6ICdmb250U2l6ZScsXG4gICAgICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gICAgICAnZm9udC1zdHlsZSc6ICdmb250U3R5bGUnLFxuICAgICAgJ2ZvbnQtZmFtaWx5JzogJ2ZvbnRGYW1pbHknLFxuICAgICAgJ2ZvbnQtY29sb3InOiAnZm9udENvbG9yJ1xuICAgIH07XG5cbiAgICB2YXIgbm9kZVByb3BEZXRhaWxzID0ge1xuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiB7XG4gICAgICAgICdjb252ZXJ0ZXInOiBjb252ZXJ0SGV4Q29sb3IsXG4gICAgICAgICdleHRyYS1maWVsZCc6ICdjb2xvcidcbiAgICAgIH0sXG4gICAgIC8qICAnYmFja2dyb3VuZC1vcGFjaXR5Jzoge1xuICAgICAgICAnY29udmVydGVyJzogY29udmVydEhleENvbG9yLFxuICAgICAgICAnZXh0cmEtZmllbGQnOiAnb3BhY2l0eSdcbiAgICAgIH0sICovXG4gICAgICAnYm9yZGVyLWNvbG9yJzoge1xuICAgICAgICAnY29udmVydGVyJzogY29udmVydEhleENvbG9yLFxuICAgICAgICAnZXh0cmEtZmllbGQnOiAnY29sb3InXG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBlZGdlUHJvcERldGFpbHMgPSB7XG4gICAgICAnbGluZS1jb2xvcic6IHtcbiAgICAgICAgJ2NvbnZlcnRlcic6IGNvbnZlcnRIZXhDb2xvcixcbiAgICAgICAgJ2V4dHJhLWZpZWxkJzogJ2NvbG9yJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaW5mb2JveFByb3BEZXRhaWxzID0ge1xuICAgICAgJ2ZvbnQtY29sb3InOiB7XG4gICAgICAgICdjb252ZXJ0ZXInOiBjb252ZXJ0SGV4Q29sb3IsXG4gICAgICAgICdleHRyYS1maWVsZCc6ICdjb2xvcidcbiAgICAgIH0sXG4gICAgICAnYm9yZGVyLWNvbG9yJzoge1xuICAgICAgICAnY29udmVydGVyJzogY29udmVydEhleENvbG9yLFxuICAgICAgICAnZXh0cmEtZmllbGQnOiAnY29sb3InXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRJZCggZWxlICkge1xuICAgICAgcmV0dXJuIGVsZS5kYXRhLmlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluZm9ib3hJZCggaW5mb2JveCApIHtcbiAgICAgIHJldHVybiBpbmZvYm94LmlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEVsZW1lbnRTdHlsZVByb3AoIGVsZSwgbmFtZSwgdmFsdWUgKSB7XG4gICAgICBlbGUuZGF0YVsgbmFtZSBdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0SW5mb2JveFN0eWxlUHJvcCggaW5mb2JveCwgbmFtZSwgdmFsdWUgKSB7XG4gICAgICBpbmZvYm94LnN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0aGUgc3R5bGUgdG8gbGlzdCBhbmQgb3ZlcndyaXRlIHRoZSBkZWZhdWx0IHN0eWxlXG4gICAgZnVuY3Rpb24gb3ZlcnJpZGVTdHlsZVByb3BlcnRpZXMoIGxpc3QsIHByb3BNYXAsIHByb3BEZXRhaWxzLCBnZXRJZCwgc2V0U3R5bGVQcm9wICkge1xuICAgICAgZm9yICh2YXIgaT0wOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbWVtYmVyID0gbGlzdFtpXTtcbiAgICAgICAgdmFyIG1lbWJlclN0eWxlID0gbWVtYmVySURUb1N0eWxlWyBnZXRJZCggbWVtYmVyICkgXTtcblxuICAgICAgICBpZiAoIW1lbWJlclN0eWxlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmtleXMoIHByb3BNYXAgKS5mb3JFYWNoKCBmdW5jdGlvbiggcHJvcE5hbWUgKSB7XG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHByb3BNYXBbIHByb3BOYW1lIF07XG4gICAgICAgICAgdmFyIGZpZWxkVmFsID0gbWVtYmVyU3R5bGVbIGZpZWxkTmFtZSBdO1xuICAgICAgICAgIGlmICggZmllbGRWYWwgKSB7XG4gICAgICAgICAgICB2YXIgZGV0YWlscyA9IHByb3BEZXRhaWxzICYmIHByb3BEZXRhaWxzWyBwcm9wTmFtZSBdO1xuICAgICAgICAgICAgaWYgKCBkZXRhaWxzICkge1xuICAgICAgICAgICAgICBpZiAoIGRldGFpbHNbICdjb252ZXJ0ZXInIF0gKSB7XG4gICAgICAgICAgICAgICAgZmllbGRWYWwgPSBkZXRhaWxzWyAnY29udmVydGVyJyBdKCBmaWVsZFZhbCApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCBkZXRhaWxzWyAnZXh0cmEtZmllbGQnIF0gKSB7XG4gICAgICAgICAgICAgICAgZmllbGRWYWwgPSBmaWVsZFZhbFsgZGV0YWlsc1sgJ2V4dHJhLWZpZWxkJyBdIF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0U3R5bGVQcm9wKCBtZW1iZXIsIHByb3BOYW1lLCBmaWVsZFZhbCApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSApO1xuXG4gICAgICAgIC8vIGlmIHRoZSBtZW1iZXIgaXMgYSBub2RlXG4gICAgICAgIGlmICggbWVtYmVyLmRhdGEgJiYgbWVtYmVyLmRhdGEuc3RhdGVzYW5kaW5mb3MgKSB7XG4gICAgICAgICAgb3ZlcnJpZGVTdHlsZVByb3BlcnRpZXMoIG1lbWJlci5kYXRhLnN0YXRlc2FuZGluZm9zLCBpbmZvYm94UHJvcE1hcCwgaW5mb2JveFByb3BEZXRhaWxzLCBnZXRJbmZvYm94SWQsIHNldEluZm9ib3hTdHlsZVByb3AgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG92ZXJyaWRlU3R5bGVQcm9wZXJ0aWVzKCBub2Rlcywgbm9kZVByb3BNYXAsIG5vZGVQcm9wRGV0YWlscywgZ2V0RWxlbWVudElkLCBzZXRFbGVtZW50U3R5bGVQcm9wICk7XG4gICAgb3ZlcnJpZGVTdHlsZVByb3BlcnRpZXMoIGVkZ2VzLCBlZGdlUHJvcE1hcCwgZWRnZVByb3BEZXRhaWxzLCBnZXRFbGVtZW50SWQsIHNldEVsZW1lbnRTdHlsZVByb3AgKTtcbiAgfTtcblxuICBzYmdubWxUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMubWFwLmV4dGVuc2lvbiAmJiB0aGlzLm1hcC5leHRlbnNpb24uaGFzKCdtYXBQcm9wZXJ0aWVzJykpIHsgLy8gcmVuZGVyIGV4dGVuc2lvbiB3YXMgZm91bmRcbiAgICAgICB2YXIgeG1sID0gdGhpcy5tYXAuZXh0ZW5zaW9uLmdldCgnbWFwUHJvcGVydGllcycpO1xuICAgICAgIHZhciBvYmo7XG4gICAgICAgcGFyc2VTdHJpbmcoeG1sLCBmdW5jdGlvbiAoZXJyLCByZXN1bHQpIHtcbiAgICAgICAgICBvYmogPSByZXN1bHQ7XG4gICAgICAgfSk7XG4gICAgICAgcmV0dXJuIG9iajtcbiAgICB9ZWxzZXtcbiAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHttYXBQcm9wZXJ0aWVzIDoge2NvbXBvdW5kUGFkZGluZyA6IG1haW5VdGlsaXRpZXMuZ2V0Q29tcG91bmRQYWRkaW5nKCl9fTtcbiAgICAgICAgfVxuICAgICBcblxuICAgIFxuICB9O1xuXG4gIHNiZ25tbFRvSnNvbi5jb252ZXJ0ID0gZnVuY3Rpb24gKHhtbE9iamVjdCwgdXJsUGFyYW1zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBjeXRvc2NhcGVKc05vZGVzID0gW107XG4gICAgdmFyIGN5dG9zY2FwZUpzRWRnZXMgPSBbXTtcbiAgICB2YXIgY29tcGFydG1lbnRDaGlsZHJlbk1hcCA9IHt9OyAvLyBNYXAgY29tcGFydG1lbnRzIGNoaWxkcmVuIHRlbXBvcmFyaWx5XG4gICAgZWxlbWVudFV0aWxpdGllcy5maWxlRm9ybWF0ID0gJ3NiZ25tbCc7XG5cbiAgICB2YXIgc2JnbjtcbiAgICB0cnkge1xuICAgICAgdmFyIHhtbFN0cmluZyA9IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoeG1sT2JqZWN0KTtcbiAgICAgIHNiZ24gPSBsaWJzYmduanMuU2Jnbi5mcm9tWE1MKHhtbFN0cmluZyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBwYXJzZSBzYmdubWwuIFwiKyBlcnIpO1xuICAgIH1cblxuICAgIHZhciBtYXA7XG4gICAgaWYoc2Jnbi5tYXBzLmxlbmd0aCA8IDEpIHsgLy8gZW1wdHkgc2JnblxuICAgICAgcmV0dXJuIHtub2RlczogW10sIGVkZ2VzOiBbXX07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbWFwID0gc2Jnbi5tYXBzWzBdOyAvLyB0YWtlIGZpcnN0IG1hcCBvZiB0aGUgZmlsZSBhcyB0aGUgbWFpbiBtYXBcbiAgICB9XG5cbiAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgPSBlbGVtZW50VXRpbGl0aWVzLmxhbmd1YWdlVG9NYXBUeXBlKG1hcC5sYW5ndWFnZSk7XG5cbiAgICB2YXIgY29tcGFydG1lbnRzID0gc2VsZi5nZXRBbGxDb21wYXJ0bWVudHMobWFwLmdseXBocyk7XG5cbiAgICB2YXIgZ2x5cGhzID0gbWFwLmdseXBocztcbiAgICB2YXIgYXJjcyA9IG1hcC5hcmNzO1xuXG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IGdseXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuXG4gICAgICAvLyBsaWJzYmduIGxpYnJhcnkgbGlzdHMgdGhlIGdseXBocyBvZiBjb21wbGV4ZXMgaW4gZWxlLmdseXBoTWVtYmVycyBidXQgaXQgZG9lcyBub3Qgc3RvcmUgdGhlIGdseXBocyBvZiBjb21wYXJ0bWVudHNcbiAgICAgIC8vIHN0b3JlIGdseXBoIG1lbWJlcnMgb2YgY29tcGFydG1lbnRzIGhlcmUuXG4gICAgICB2YXIgY29tcGFydG1lbnRSZWYgPSBnbHlwaC5jb21wYXJ0bWVudFJlZjtcblxuICAgICAgaWYgKGdseXBoLmNsYXNzXyA9PT0gJ2NvbXBhcnRtZW50Jykge1xuICAgICAgICBpZiAoY29tcGFydG1lbnRDaGlsZHJlbk1hcFtnbHlwaC5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXBhcnRtZW50Q2hpbGRyZW5NYXBbZ2x5cGguaWRdID0gZ2x5cGguZ2x5cGhNZW1iZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2x5cGguZ2x5cGhNZW1iZXJzID0gY29tcGFydG1lbnRDaGlsZHJlbk1hcFtnbHlwaC5pZF07XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wYXJ0bWVudFJlZikge1xuICAgICAgICBpZiAoY29tcGFydG1lbnRDaGlsZHJlbk1hcFtjb21wYXJ0bWVudFJlZl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbXBhcnRtZW50Q2hpbGRyZW5NYXBbY29tcGFydG1lbnRSZWZdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgY29tcGFydG1lbnRDaGlsZHJlbk1hcFtjb21wYXJ0bWVudFJlZl0ucHVzaChnbHlwaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXG4gICAgaWYodXJsUGFyYW1zICYmIHVybFBhcmFtcy5jb21wb3VuZFBhZGRpbmcpIHtcbiAgICAgIG1haW5VdGlsaXRpZXMuc2V0Q29tcG91bmRQYWRkaW5nKE51bWJlcih1cmxQYXJhbXMuY29tcG91bmRQYWRkaW5nKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFtYXAuZXh0ZW5zaW9uKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdseXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZ2x5cGggPSBnbHlwaHNbaV07XG4gICAgICAgLy8gaWYoZ2x5cGguY2xhc3NfID09IFwiY29tcGxleFwiKWNvbnRpbnVlO1xuICAgICAgICBjaGlsZE5vZGVzID0gZ2x5cGguZ2x5cGhNZW1iZXJzLmZpbHRlcihmdW5jdGlvbihjaGlsZCl7IHJldHVybiBjaGlsZC5jbGFzc18gIT0gXCJzdGF0ZSB2YXJpYWJsZVwiICYmIGNoaWxkLmNsYXNzXyAhPSBcInVuaXQgb2YgaW5mb3JtYXRpb25cIn0pO1xuICAgICAgICBpZihjaGlsZE5vZGVzLmxlbmd0aCA+IDApeyAvLyBjb21wb3VuZCBub2RlXG4gICAgICAgICAgdmFyIGhhc01pbiA9IGZhbHNlO1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGorKykgeyAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgY2hpbGROb2RlID0gY2hpbGROb2Rlc1tqXTtcbiAgICAgICAgICAgIHZhciBib3JkZXJXaWR0aCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoY2hpbGROb2RlLmNsYXNzXylbXCJib3JkZXItd2lkdGhcIl07XG4gICAgICAgICAgICB2YXIgc3RhdGVBbmRJbmZvcyA9IGNoaWxkTm9kZS5nbHlwaE1lbWJlcnMuZmlsdGVyKGZ1bmN0aW9uKGNoaWxkKXsgcmV0dXJuIGNoaWxkLmNsYXNzXyA9PSBcInN0YXRlIHZhcmlhYmxlXCIgfHwgY2hpbGQuY2xhc3NfID09IFwidW5pdCBvZiBpbmZvcm1hdGlvblwifSk7XG4gICAgICAgICAgICBpZihzdGF0ZUFuZEluZm9zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICBmb3IodmFyIGsgPSAwIDsgazxzdGF0ZUFuZEluZm9zLmxlbmd0aDsgaysrKXtcbiAgICAgICAgICAgICAgICB2YXIgc3RhdGVCYm94ID0gc3RhdGVBbmRJbmZvc1trXS5iYm94O1xuICAgICAgICAgICAgICAgIGlmKHN0YXRlQmJveC55IC0gZ2x5cGguYmJveC55IDwgbWluRGlzdGFuY2VUb0NoaWxkcmVuKXtcbiAgICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IHN0YXRlQmJveC55IC0gZ2x5cGguYmJveC55IC0gYm9yZGVyV2lkdGg7XG4gICAgICAgICAgICAgICAgICBoYXNNaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihzdGF0ZUJib3gueCAtIGdseXBoLmJib3gueCA8IG1pbkRpc3RhbmNlVG9DaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gPSBzdGF0ZUJib3gueCAtIGdseXBoLmJib3gueCAtIGJvcmRlcldpZHRoO1xuICAgICAgICAgICAgICAgICAgaGFzTWluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZihnbHlwaC5iYm94LnkgKyAgZ2x5cGguYmJveC5oIC0gKHN0YXRlQmJveC55ICsgc3RhdGVCYm94LmgpICA8IG1pbkRpc3RhbmNlVG9DaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gPSBnbHlwaC5iYm94LnkgKyAgZ2x5cGguYmJveC5oIC0gKHN0YXRlQmJveC55ICsgc3RhdGVCYm94LmgpIC0gYm9yZGVyV2lkdGg7XG4gICAgICAgICAgICAgICAgICBoYXNNaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZihnbHlwaC5iYm94LnggKyAgZ2x5cGguYmJveC53IC0gKHN0YXRlQmJveC54ICsgc3RhdGVCYm94LncpICA8IG1pbkRpc3RhbmNlVG9DaGlsZHJlbil7XG4gICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gPSBnbHlwaC5iYm94LnggKyAgZ2x5cGguYmJveC53IC0gKHN0YXRlQmJveC54ICsgc3RhdGVCYm94LncpIC0gYm9yZGVyV2lkdGg7XG4gICAgICAgICAgICAgICAgICBoYXNNaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGNoaWxkTm9kZUJib3ggPSBjaGlsZE5vZGUuYmJveDsgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGxlZnQgPWNoaWxkTm9kZUJib3gueCAtIGdseXBoLmJib3gueCAtIGJvcmRlcldpZHRoLzI7XG4gICAgICAgICAgICB2YXIgcmlnaHQgPSAgKGdseXBoLmJib3gueCArIGdseXBoLmJib3gudykgLSAoY2hpbGROb2RlQmJveC54ICsgY2hpbGROb2RlQmJveC53KSAtIGJvcmRlcldpZHRoLzI7XG4gICAgICAgICAgICB2YXIgdG9wID0gY2hpbGROb2RlQmJveC55IC0gZ2x5cGguYmJveC55IC0gYm9yZGVyV2lkdGgvMjtcbiAgICAgICAgICAgIHZhciBib3R0b20gPSAoZ2x5cGguYmJveC55ICsgZ2x5cGguYmJveC5oKSAtIChjaGlsZE5vZGVCYm94LnkgKyBjaGlsZE5vZGVCYm94LmgpIC0gYm9yZGVyV2lkdGgvMjtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYobGVmdCA8IG1pbkRpc3RhbmNlVG9DaGlsZHJlbil7XG4gICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IGxlZnQ7XG4gICAgICAgICAgICAgIGhhc01pbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihyaWdodCA8IG1pbkRpc3RhbmNlVG9DaGlsZHJlbil7XG4gICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IHJpZ2h0O1xuICAgICAgICAgICAgICBoYXNNaW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodG9wIDwgbWluRGlzdGFuY2VUb0NoaWxkcmVuKXtcbiAgICAgICAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gdG9wO1xuICAgICAgICAgICAgICBoYXNNaW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoYm90dG9tIDwgbWluRGlzdGFuY2VUb0NoaWxkcmVuKXtcbiAgICAgICAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gYm90dG9tO1xuICAgICAgICAgICAgICBoYXNNaW4gPSB0cnVlO1xuICAgICAgICAgICAgfSAgICAgICAgICAgXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoaGFzTWluKXtcbiAgICAgICAgICAgIGlmKGdseXBoLmNsYXNzXyA9PSBcImNvbXBsZXhcIil7XG4gICAgICAgICAgICAgIHZhciBzdGF0ZUFuZEluZm9zID0gZ2x5cGguZ2x5cGhNZW1iZXJzLmZpbHRlcihmdW5jdGlvbihjaGlsZCl7IHJldHVybiBjaGlsZC5jbGFzc18gPT0gXCJzdGF0ZSB2YXJpYWJsZVwiIHx8IGNoaWxkLmNsYXNzXyA9PSBcInVuaXQgb2YgaW5mb3JtYXRpb25cIn0pO1xuICAgICAgICAgICAgICB2YXIgZXh0cmFDb21wbGV4UGFkZGluZyA9IHR5cGVvZiBvcHRpb25zLmV4dHJhQ29tcGxleFBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmV4dHJhQ29tcGxleFBhZGRpbmcuY2FsbCgpIDogb3B0aW9ucy5leHRyYUNvbXBsZXhQYWRkaW5nO1xuICAgICAgICAgICAgICBpZihnbHlwaC5sYWJlbCAhPSB1bmRlZmluZWQgJiYgZ2x5cGgubGFiZWwudGV4dCAhPSB1bmRlZmluZWQgJiYgZ2x5cGgubGFiZWwudGV4dC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gPSBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gLSAwLjUgKiBleHRyYUNvbXBsZXhQYWRkaW5nO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzVG9wQm90dG9tSW5mbyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZUFuZEluZm9zLmZvckVhY2goZnVuY3Rpb24oc3RhdGVBbmRJbmZvKXtcbiAgICAgICAgICAgICAgICAgICAgICBpZiggTnVtYmVyKChzdGF0ZUFuZEluZm8uYmJveC55ICsgc3RhdGVBbmRJbmZvLmJib3guaC8yKS50b0ZpeGVkKDIpKSA9PSBOdW1iZXIoKGdseXBoLmJib3gueSArIGdseXBoLmJib3guaCkudG9GaXhlZCgyKSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzVG9wQm90dG9tSW5mbyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYoaGFzVG9wQm90dG9tSW5mbyl7XG4gICAgICAgICAgICAgICAgICAgICAgbWluRGlzdGFuY2VUb0NoaWxkcmVuID0gbWluRGlzdGFuY2VUb0NoaWxkcmVuIC0gMC41ICogZXh0cmFDb21wbGV4UGFkZGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9ZWxzZSBpZihzdGF0ZUFuZEluZm9zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiAtPSAyO1xuICAgICAgICAgICAgICB9XG4gIFxuICBcbiAgXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdmFyIGV4dHJhQ29tcGFydG1lbnRQYWRkaW5nID0gdHlwZW9mIG9wdGlvbnMuZXh0cmFDb21wYXJ0bWVudFBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBvcHRpb25zLmV4dHJhQ29tcGFydG1lbnRQYWRkaW5nLmNhbGwoKSA6IG9wdGlvbnMuZXh0cmFDb21wYXJ0bWVudFBhZGRpbmc7XG4gICAgICAgICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IG1pbkRpc3RhbmNlVG9DaGlsZHJlbiAtIGV4dHJhQ29tcGFydG1lbnRQYWRkaW5nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcblxuICAgICAgICB9XG4gICAgICB9ICAgXG4gICAgICAgIG1pbkRpc3RhbmNlVG9DaGlsZHJlbiA9IE1hdGgucm91bmQobWluRGlzdGFuY2VUb0NoaWxkcmVuKTtcbiAgICAgICAgdmFyIG5ld1BhZGRpbmcgPSBtaW5EaXN0YW5jZVRvQ2hpbGRyZW4gLSAxOyAvLyBjb21lcyBmcm9tIGN5dG9zY2FwZSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBib3VuZGluZyBib3ggd2hpY2ggaXMgb3V0ZXJ3aWR0aCArIDEgKG9uIGVhY2ggc2lkZSlcbiAgICAgICAgaWYobmV3UGFkZGluZyA8IDAgfHwgbWluRGlzdGFuY2VUb0NoaWxkcmVuID09IE1hdGgucm91bmQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKXtcbiAgICAgICAgICBuZXdQYWRkaW5nID0gMDtcbiAgICAgICAgfVxuICAgICAgICBtYWluVXRpbGl0aWVzLnNldENvbXBvdW5kUGFkZGluZyhuZXdQYWRkaW5nKTtcbiAgICAgIFxuICAgICBcbiAgICB9ZWxzZXtcbiAgICAgIG1haW5VdGlsaXRpZXMuc2V0Q29tcG91bmRQYWRkaW5nKE51bWJlcihzZWxmLm1hcFByb3BlcnRpZXNUb09iaigpLm1hcFByb3BlcnRpZXMuY29tcG91bmRQYWRkaW5nKSk7XG4gICAgfVxuXG4gICAgXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZ2x5cGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgZ2x5cGggPSBnbHlwaHNbaV07XG4gICAgICBzZWxmLnRyYXZlcnNlTm9kZXMoZ2x5cGgsIGN5dG9zY2FwZUpzTm9kZXMsICcnLCBjb21wYXJ0bWVudHMsbWluRGlzdGFuY2VUb0NoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgYXJjcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGFyYyA9IGFyY3NbaV07XG4gICAgICBzZWxmLmFkZEN5dG9zY2FwZUpzRWRnZShhcmMsIGN5dG9zY2FwZUpzRWRnZXMsIHhtbE9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKG1hcC5leHRlbnNpb24gJiYgbWFwLmV4dGVuc2lvbi5oYXMoJ3JlbmRlckluZm9ybWF0aW9uJykpIHsgLy8gcmVuZGVyIGV4dGVuc2lvbiB3YXMgZm91bmRcbiAgICAgIHNlbGYuYXBwbHlTdHlsZShtYXAuZXh0ZW5zaW9uLmdldCgncmVuZGVySW5mb3JtYXRpb24nKSwgY3l0b3NjYXBlSnNOb2RlcywgY3l0b3NjYXBlSnNFZGdlcyk7XG4gICAgfVxuXG4gICAgdmFyIGN5dG9zY2FwZUpzR3JhcGggPSB7fTtcbiAgICBjeXRvc2NhcGVKc0dyYXBoLm5vZGVzID0gY3l0b3NjYXBlSnNOb2RlcztcbiAgICBjeXRvc2NhcGVKc0dyYXBoLmVkZ2VzID0gY3l0b3NjYXBlSnNFZGdlcztcblxuICAgIHRoaXMuaW5zZXJ0ZWROb2RlcyA9IHt9O1xuXG5cbiAgICB2YXIgc2hvdWxkRGlzYWJsZVBvcnRzID0gZmFsc2U7XG4gICAgY3l0b3NjYXBlSnNHcmFwaC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmKChub2RlLmRhdGEuYmJveC53ID09IDAgfHwgaXNOYU4obm9kZS5kYXRhLmJib3gudykpICYmIChub2RlLmRhdGEuYmJveC5oID09IDAgfHwgaXNOYU4obm9kZS5kYXRhLmJib3guaCkpKXtcbiAgICAgICAgbm9kZS5kYXRhLmJib3gudyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMobm9kZS5kYXRhLmNsYXNzKS53aWR0aDtcbiAgICAgICAgbm9kZS5kYXRhLmJib3guaCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMobm9kZS5kYXRhLmNsYXNzKS5oZWlnaHQ7ICAgICBcbiAgICAgICAvLyBub2RlLmRhdGEuYmJveC54ID0gMTU7ICAgICBcbiAgICAgICAvLyBub2RlLmRhdGEuYmJveC55ID0gMTA7IFxuICAgICAgfSBcbiAgICAgIG5vZGUuZGF0YS5wb3J0cy5mb3JFYWNoKGZ1bmN0aW9uKHBvcnQpe1xuICAgICAgICBpZiAoaXNOYU4ocG9ydC54KSB8fCBpc05hTihwb3J0LnkpKXtcbiAgICAgICAgICBzaG91bGREaXNhYmxlUG9ydHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTsgICAgIFxuICAgIH0pOyBcblxuICAgICAgaWYoc2hvdWxkRGlzYWJsZVBvcnRzKXsgICAgICBcbiAgICAgIGdyYXBoVXRpbGl0aWVzLmRpc2FibGVQb3J0cygpO1xuICAgIH1cbiAgICAvL2dldERlZmF1bHRQcm9wZXJ0aWVzXG4gICAgLy9lbGVtZW50VXRpbGl0aWVzLm5vZGVUeXBlcy5mb3JFYWNoKGZ1bmN0aW9uKHR5cGUpe1xuICAgIC8vICBjb25zb2xlLmxvZyhlbGVtZW50VXRpbGl0aWVzLmdldERlZmF1bHRQcm9wZXJ0aWVzKHR5cGUpKTtcbiAgICAvL30pO1xuICAgIFxuICAgIC8vY29uc29sZS5sb2coY3l0b3NjYXBlSnNHcmFwaCk7XG4gICAgLy9jb25zb2xlLmxvZyggZWxlbWVudFV0aWxpdGllcy5ub2RlVHlwZXMpO1xuICAgIHJldHVybiBjeXRvc2NhcGVKc0dyYXBoO1xuICB9O1xuICBcbiAgICBzYmdubWxUb0pzb24uZG9WYWxpZGF0aW9uID0gZnVuY3Rpb24oeG1sU3RyaW5nKSB7XG4gICBcdHZhciBlcnJvcnMgPSBbXTtcblx0ICAgIHRyeSB7XG4gICAgICBcdFx0IGVycm9ycyA9IGxpYnNiZ25qcy5TYmduLmRvVmFsaWRhdGlvbih4bWxTdHJpbmcpO1xuICAgXHQgICB9XG4gICAgXHQgIGNhdGNoIChlcnIpIHtcbiAgICAgIFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZCBub3QgZG8gdmFsaWRhdGlvbi4gXCIrIGVycik7XG4gICAgXHQgIH1cblx0ICByZXR1cm4gZXJyb3JzO1xuICB9O1xuXG4gIHJldHVybiBzYmdubWxUb0pzb247XG59O1xuXG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblxuICAgIHZhciBqc29uVG9TYmdubWwsIGVsZW1lbnRVdGlsaXRpZXMsIGN5O1xuXG4gICAgZnVuY3Rpb24gc2Jnbm1sVG9TYm1sKHBhcmFtKSB7XG4gICAgICAgIGpzb25Ub1NiZ25tbCA9IHBhcmFtLmpzb25Ub1NiZ25tbENvbnZlcnRlcjtcbiAgICAgICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgICAgIGN5ID0gcGFyYW0uc2JnbkN5SW5zdGFuY2UuZ2V0Q3koKTtcbiAgICB9XG5cblxuICAgIHNiZ25tbFRvU2JtbC5jb252ZXJ0ID0gZnVuY3Rpb24gKHhtbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGNvbnZlcnNpb25BcGlVcmwgPSBcImh0dHBzOi8vbWluZXJ2YS1zZXJ2aWNlLmxjc2IudW5pLmx1L21pbmVydmEvYXBpL2NvbnZlcnQvU0JHTi1NTDpTQk1MXCI7XG5cbiAgICAgICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgICAgICB0eXBlOiAncG9zdCcsXG4gICAgICAgICAgICB1cmw6IGNvbnZlcnNpb25BcGlVcmwsXG4gICAgICAgICAgICBjb250ZW50VHlwZTogXCJ0ZXh0L3htbDsgY2hhcnNldD1VVEYtOFwiLFxuICAgICAgICAgICAgZGF0YTogeG1sLFxuICAgICAgICAgICAgZGF0YVR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEsIHRleHRTdGF0dXMsIHhocikge1xuICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soe3Jlc3VsdDogZmFsc2UsIGVycm9yOiBkYXRhLCBtZXNzYWdlOiBcIkludmFsaWQgcmVzcG9uc2UgY29kZTogXCIgKyB4aHIuc3RhdHVzfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soe3Jlc3VsdDogdHJ1ZSwgbWVzc2FnZTogZGF0YSwgZXJyb3I6IFwiXCJ9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtyZXN1bHQ6IGZhbHNlLCBlcnJvcjogZXJyb3IsIG1lc3NhZ2U6IFwiXCJ9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmYWlsOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayh7cmVzdWx0OiBmYWxzZSwgZXJyb3I6IGVycm9yLCBtZXNzYWdlOiBcIlwifSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBzYmdubWxUb1NibWw7XG5cbn1cbiAgIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcblxuICB2YXIganNvblRvU2Jnbm1sLCBlbGVtZW50VXRpbGl0aWVzLCBjeTtcblxuICBmdW5jdGlvbiBzYm1sVG9TYmdubWwocGFyYW0pIHtcbiAgICBqc29uVG9TYmdubWwgPSBwYXJhbS5qc29uVG9TYmdubWxDb252ZXJ0ZXI7XG4gICAgZWxlbWVudFV0aWxpdGllcyA9IHBhcmFtLmVsZW1lbnRVdGlsaXRpZXM7XG4gICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICB9XG5cblxuICBzYm1sVG9TYmdubWwuY29udmVydCA9IGZ1bmN0aW9uICh4bWwsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgY29udmVyc2lvbkFwaVVybCA9IFwiaHR0cHM6Ly9taW5lcnZhLXNlcnZpY2UubGNzYi51bmkubHUvbWluZXJ2YS9hcGkvY29udmVydC9TQk1MOlNCR04tTUxcIjtcblxuICAgICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgIHVybDogY29udmVyc2lvbkFwaVVybCxcbiAgICAgICAgICBjb250ZW50VHlwZTogXCJ0ZXh0L3htbDsgY2hhcnNldD1VVEYtOFwiLFxuICAgICAgICAgIGRhdGE6IHhtbCxcbiAgICAgICAgICBkYXRhVHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEsIHRleHRTdGF0dXMsIHhocikge1xuICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICBjYWxsYmFjayh7cmVzdWx0OiBmYWxzZSwgZXJyb3I6IGRhdGEsIG1lc3NhZ2U6IFwiSW52YWxpZCByZXNwb25zZSBjb2RlOiBcIiArIHhoci5zdGF0dXN9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHtyZXN1bHQ6IHRydWUsIG1lc3NhZ2U6IGRhdGEsIGVycm9yOiBcIlwifSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soe3Jlc3VsdDogZmFsc2UsIGVycm9yOiBlcnJvciwgbWVzc2FnZTogXCJcIn0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFpbDogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKHtyZXN1bHQ6IGZhbHNlLCBlcnJvcjogZXJyb3IsIG1lc3NhZ2U6IFwiXCJ9KTtcbiAgICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIFxuICB9XG5cbiAgcmV0dXJuIHNibWxUb1NiZ25tbDtcblxufVxuIiwidmFyIHRkUGFyc2VyID0gcmVxdWlyZSgnLi90YWItZGVsaW1ldGVkLXBhcnNlcicpO1xuXG5mdW5jdGlvbiBzdHJUb1NldCggc3RyLCBzcGxpdEJ5ICkge1xuICB2YXIgc2V0ID0ge307XG4gIHZhciBsaXN0ID0gc3RyID8gc3RyLnNwbGl0KCBzcGxpdEJ5ICkgOiBbXTtcblxuICBsaXN0LmZvckVhY2goIGZ1bmN0aW9uKCBtZW1iZXIgKSB7XG4gICAgc2V0WyBtZW1iZXIgXSA9IHRydWU7XG4gIH0gKTtcblxuICByZXR1cm4gc2V0O1xufVxuXG5mdW5jdGlvbiBnZXRFbXB0eUdyYXBoRGF0YSgpIHtcbiAgcmV0dXJuIHsgbm9kZXM6IFtdLCBlZGdlczogW10gfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcblxuICB2YXIgZWxlbWVudFV0aWxpdGllcztcblxuICBmdW5jdGlvbiBzaWZUb0pzb24ocGFyYW0pIHtcbiAgICBlbGVtZW50VXRpbGl0aWVzID0gcGFyYW0uZWxlbWVudFV0aWxpdGllcztcbiAgfVxuXG4gIHNpZlRvSnNvbi5pbml0R3JhcGhWYXJpYWJsZXMgPSBmdW5jdGlvbigpIHtcbiAgICBzaWZUb0pzb24uZ3JhcGhEYXRhID0gZ2V0RW1wdHlHcmFwaERhdGEoKTtcbiAgICBzaWZUb0pzb24ubmFtZVRvTm9kZSA9IHt9O1xuICAgIHNpZlRvSnNvbi5rZXlUb0VkZ2UgPSB7fTtcbiAgICAvLyBzZXQgb2Ygbm9kZXMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIGFuIGVkZ2VcbiAgICBzaWZUb0pzb24ubm9kZVdpdGhTcGVjaWZpZWRDbGFzcyA9IHt9O1xuICB9XG5cbiAgc2lmVG9Kc29uLmRlZmF1bHROb2RlVHlwZSA9ICdTSUYgbWFjcm9tb2xlY3VsZSc7XG5cbiAgc2lmVG9Kc29uLm1lcmdlR3JhcGhEYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFsgLi4uc2lmVG9Kc29uLmdyYXBoRGF0YS5ub2RlcywgLi4uc2lmVG9Kc29uLmdyYXBoRGF0YS5lZGdlcyBdO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5jb252ZXJ0ID0gZnVuY3Rpb24oIGdyYXBoVGV4dCApIHtcbiAgICBlbGVtZW50VXRpbGl0aWVzLmZpbGVGb3JtYXQgPSAnc2lmJztcbiAgICBlbGVtZW50VXRpbGl0aWVzLm1hcFR5cGUgPSAnU0lGJztcblxuICAgIHNpZlRvSnNvbi5pbml0R3JhcGhWYXJpYWJsZXMoKTtcblxuICAgIGlmICggZ3JhcGhUZXh0ID09IHVuZGVmaW5lZCApIHtcbiAgICAgIHJldHVybiBzaWZUb0pzb24uZ3JhcGhEYXRhO1xuICAgIH1cblxuICAgIHZhciBsaW5lcyA9IHRkUGFyc2VyLmdldExpbmVzQXJyYXkoIGdyYXBoVGV4dC50b1N0cmluZygpICk7XG5cbiAgICBsaW5lcy5mb3JFYWNoKCBmdW5jdGlvbiggbGluZSApIHtcbiAgICAgIHZhciB0YWJzID0gdGRQYXJzZXIuZ2V0VGFic0FycmF5KCBsaW5lICk7XG5cbiAgICAgIC8vIGxpbmUgcmVwcmVzZW50cyBhIG5vZGVcbiAgICAgIGlmICggdGFicy5sZW5ndGggPT09IDEgKSB7XG4gICAgICAgIHZhciBub2RlTmFtZSA9IHRhYnNbIDAgXTtcbiAgICAgICAgLy8gY3JlYXRlIHRoZSBub2RlIGlmIGRvZXMgbm90IGV4aXN0IHlldFxuICAgICAgICAvLyBpZiB0aGUgbm9kZSBpcyBqdXN0IGNyZWF0ZWQgaXQgd2lsbCBoYXZlIHRoZSBkZWZhdWx0IG5vZGUgY2xhc3NcbiAgICAgICAgc2lmVG9Kc29uLmdldE9yQ3JlYXRlTm9kZSggbm9kZU5hbWUgKTtcbiAgICAgIH1cbiAgICAgIC8vIGxpbmUgcmVwcmVzZW50cyBhbiBlZGdlIGFuZCB0aGUgY29ubmVjdGVkIG5vZGVzXG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIHNyY05hbWUgPSB0YWJzWyAwIF07XG4gICAgICAgIHZhciBlZGdlVHlwZSA9IHRhYnNbIDEgXTtcbiAgICAgICAgdmFyIHRndE5hbWUgPSB0YWJzWyAyIF07XG4gICAgICAgIHZhciBwY0lEU2V0ID0gc3RyVG9TZXQoIHRhYnNbIDMgXSwgLzt8IC8gKTtcbiAgICAgICAgdmFyIHNpdGVMb2NTZXQgPSBzdHJUb1NldCggdGFic1sgNCBdLCAnOycgKTtcblxuICAgICAgICB2YXIgc3JjQ2xhc3MgPSBzaWZUb0pzb24uZ2V0Tm9kZUNsYXNzKCBlZGdlVHlwZSwgJ3NyYycgKTtcbiAgICAgICAgdmFyIHRndENsYXNzID0gc2lmVG9Kc29uLmdldE5vZGVDbGFzcyggZWRnZVR5cGUsICd0Z3QnICk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5vZGVzIGlmIHRoZXkgZG8gbm90IGV4aXN0IHlldFxuICAgICAgICAvLyBpZiB0aGUgbm9kZSBhbHJlYWR5IGV4aXN0cyB0aGUgbm9kZSB0eXBlIGFuZCBzbyB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgLy8gd2lsbCBiZSB1cGRhdGVkXG4gICAgICAgIHNpZlRvSnNvbi5nZXRPckNyZWF0ZU5vZGUoIHNyY05hbWUsIHNyY0NsYXNzICk7XG4gICAgICAgIHNpZlRvSnNvbi5nZXRPckNyZWF0ZU5vZGUoIHRndE5hbWUsIHRndENsYXNzICk7XG5cbiAgICAgICAgLy8gY3JlYXRlIHRoZSBlZGdlIGlmIGl0IGRvZXMgbm90IGV4aXN0IHlldFxuICAgICAgICBzaWZUb0pzb24uZ2V0T3JDcmVhdGVFZGdlKCBzcmNOYW1lLCBlZGdlVHlwZSwgdGd0TmFtZSwgcGNJRFNldCwgc2l0ZUxvY1NldCApO1xuICAgICAgfVxuICAgIH0gKTtcblxuICAgIHJldHVybiBzaWZUb0pzb24ubWVyZ2VHcmFwaERhdGEoKTtcbiAgfTtcblxuICBzaWZUb0pzb24uZ2V0Tm9kZUJ5TmFtZSA9IGZ1bmN0aW9uKCBuYW1lICkge1xuICAgIHJldHVybiBzaWZUb0pzb24ubmFtZVRvTm9kZVsgbmFtZSBdO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5nZXRFZGdlQnlQcm9wcyA9IGZ1bmN0aW9uKCBzcmNOYW1lLCB0eXBlLCB0Z3ROYW1lICkge1xuICAgIHZhciBrZXkgPSBzaWZUb0pzb24uY2FsY3VsYXRlRWRnZUtleSggc3JjTmFtZSwgdHlwZSwgdGd0TmFtZSApO1xuICAgIHJldHVybiBzaWZUb0pzb24ua2V5VG9FZGdlWyBrZXkgXTtcbiAgfTtcblxuICBzaWZUb0pzb24ubWFwTm9kZVRvTmFtZSA9IGZ1bmN0aW9uKCBub2RlLCBuYW1lICkge1xuICAgIHNpZlRvSnNvbi5uYW1lVG9Ob2RlWyBuYW1lIF0gPSBub2RlO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5tYXBFZGdlVG9LZXkgPSBmdW5jdGlvbiggZWRnZSwga2V5ICkge1xuICAgIHNpZlRvSnNvbi5rZXlUb0VkZ2VbIGtleSBdID0gZWRnZTtcbiAgfTtcblxuICBzaWZUb0pzb24uY2FsY3VsYXRlRWRnZUtleSA9IGZ1bmN0aW9uKCBzcmMsIHR5cGUsIHRndCApIHtcbiAgICByZXR1cm4gWyBzcmMsIHR5cGUsIHRndCBdLmpvaW4oICcgJyApO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5nZXRPckNyZWF0ZU5vZGUgPSBmdW5jdGlvbiggbmFtZSwgY2xhc3NOYW1lICkge1xuICAgIC8vIHNhdmUgaWYgY2xhc3MgbmFtZSBwYXJhbWV0ZXIgaXMgc2V0XG4gICAgdmFyIGNsYXNzTmFtZVNwZWNpZmllZCA9ICEhY2xhc3NOYW1lO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBzaWZUb0pzb24uZGVmYXVsdE5vZGVUeXBlO1xuXG4gICAgdmFyIG5vZGUgPSBzaWZUb0pzb24uZ2V0Tm9kZUJ5TmFtZSggbmFtZSApO1xuICAgIHZhciBkZWZhdWx0cyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RGVmYXVsdFByb3BlcnRpZXMoIGNsYXNzTmFtZSApO1xuXG4gICAgdmFyIHVwZGF0ZVdpdGhEZWZhdWx0cyA9IGZ1bmN0aW9uKCkge1xuICAgICAgZWxlbWVudFV0aWxpdGllcy5leHRlbmROb2RlRGF0YVdpdGhDbGFzc0RlZmF1bHRzKCBub2RlLmRhdGEsIGNsYXNzTmFtZSApO1xuICAgICAgbm9kZS5kYXRhLmJib3guaCA9IGRlZmF1bHRzLmhlaWdodDtcblxuICAgICAgaWYgKCBlbGVtZW50VXRpbGl0aWVzLmNhbkhhdmVTQkdOTGFiZWwoIGNsYXNzTmFtZSApICkge1xuICAgICAgICB2YXIgaXNEeW5hbWljTGFiZWwgPSBzaWZUb0pzb24uZ2V0TWFwUHJvcGVydHkoICdhZGp1c3ROb2RlTGFiZWxGb250U2l6ZUF1dG9tYXRpY2FsbHknICk7XG5cbiAgICAgICAgdmFyIGZvbnRTaXplO1xuICAgICAgICB2YXIgZm9udEZhbWlseSA9IG5vZGUuZGF0YVsgJ2ZvbnQtZmFtaWx5JyBdO1xuXG4gICAgICAgIGlmICggaXNEeW5hbWljTGFiZWwgKSB7XG4gICAgICAgICAgdmFyIGR5bmFtaWNMYWJlbFNpemUgPSBzaWZUb0pzb24uZ2V0TWFwUHJvcGVydHkoICdkeW5hbWljTGFiZWxTaXplJyApO1xuICAgICAgICAgIHZhciBjb2VmZiA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0RHluYW1pY0xhYmVsU2l6ZUNvZWZmaWNpZW50KCBkeW5hbWljTGFiZWxTaXplICk7XG4gICAgICAgICAgdmFyIG9iaiA9IHtcbiAgICAgICAgICAgIGhlaWdodDogbm9kZS5kYXRhLmJib3guaCxcbiAgICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIGZvbnRTaXplID0gZWxlbWVudFV0aWxpdGllcy5nZXREeW5hbWljTGFiZWxUZXh0U2l6ZSggb2JqLCBjb2VmZiApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZvbnRTaXplID0gbm9kZS5kYXRhWyAnZm9udC1zaXplJyBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1heCA9IDI1MDtcbiAgICAgICAgbm9kZS5kYXRhLmJib3gudyA9IGVsZW1lbnRVdGlsaXRpZXMuZ2V0V2lkdGhCeUNvbnRlbnQoIG5hbWUsIGZvbnRGYW1pbHksIGZvbnRTaXplLCB7IG1heCB9ICk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgbm9kZS5kYXRhLmJib3gudyA9IGRlZmF1bHRzLndpZHRoO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIG5vZGUgPT0gdW5kZWZpbmVkICkge1xuICAgICAgdmFyIHVpZCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVOb2RlSWQoKTtcbiAgICAgIG5vZGUgPSB7fTtcblxuICAgICAgbm9kZS5kYXRhID0ge1xuICAgICAgICBpZDogdWlkLFxuICAgICAgICBsYWJlbDogbmFtZSxcbiAgICAgICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICAgICAgYmJveDoge1xuICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgeTogMFxuICAgICAgICB9LFxuICAgICAgICBzdGF0ZXNhbmRpbmZvczogW10sXG4gICAgICAgIHBvcnRzOiBbXVxuICAgICAgfTtcblxuICAgICAgdXBkYXRlV2l0aERlZmF1bHRzKCk7XG5cbiAgICAgIHNpZlRvSnNvbi5tYXBOb2RlVG9OYW1lKCBub2RlLCBuYW1lICk7XG4gICAgICBzaWZUb0pzb24uZ3JhcGhEYXRhLm5vZGVzLnB1c2goIG5vZGUgKTtcbiAgICB9XG4gICAgLy8gaWYgY2xhc3MgbmFtZSBwYXJhbWV0ZXIgaXMgc2V0IGFuZCB0aGUgYWxyZWFkeSBleGlzdGluZyBub2RlIGhhcyBhIGRpZmZlcmVudFxuICAgIC8vIGNsYXNzIG5hbWUgY2hlY2sgaWYgdGhlIGV4aXN0aW5nIG5vZGUgaGFzIGEgc3BlY2lmaWVkIGNsYXNzIG9yIGp1c3QgdXNlZCB0aGVcbiAgICAvLyBkZWZhdWx0IG9uZSBiZWNhdXNlIGl0IHdhcyBub3QgY29taW5nIGZyb20gYW4gZWRnZS5cbiAgICAvLyBJbiBmaXJzdCBjYXNlIGdpdmUgYSB3YXJuaW5nIGFuZCBkbyBub3QgdXBkYXRlIHRoZSBjbGFzcyxcbiAgICAvLyBpbiBzZWNvbmQgY2FzZSB1cGRhdGUgdGhlIGNsYXNzIGFuZCB0aGUgbm9kZSBkYXRhIHdpdGggZGVmYXVsdHNcbiAgICBlbHNlIGlmICggY2xhc3NOYW1lU3BlY2lmaWVkICYmIG5vZGUuZGF0YS5jbGFzcyAhPT0gY2xhc3NOYW1lICkge1xuICAgICAgaWYgKCBzaWZUb0pzb24ubm9kZVdpdGhTcGVjaWZpZWRDbGFzc1sgbmFtZSBdICkge1xuICAgICAgICBjb25zb2xlLndhcm4oICdUeXBlIG9mIG5vZGUgJyArIG5hbWUgKyAnIGNhbm5vdCBiZSB1cGRhdGVkIGFzICdcbiAgICAgICAgICAgICAgICAgICAgKyBjbGFzc05hbWUgKyAnIGJlY2F1c2UgaXQgd2FzIGFscmVhZHkgc3BlY2lmaWVkIGFzICcgKyBub2RlLmRhdGEuY2xhc3MgKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBub2RlLmRhdGEuY2xhc3MgPSBjbGFzc05hbWU7XG4gICAgICAgIHVwZGF0ZVdpdGhEZWZhdWx0cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICggY2xhc3NOYW1lU3BlY2lmaWVkICkge1xuICAgICAgc2lmVG9Kc29uLm5vZGVXaXRoU3BlY2lmaWVkQ2xhc3NbIG5hbWUgXSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG5cbiAgc2lmVG9Kc29uLmdldE9yQ3JlYXRlRWRnZSA9IGZ1bmN0aW9uKCBzcmNOYW1lLCB0eXBlLCB0Z3ROYW1lLCBwY0lEU2V0LCBzaXRlTG9jU2V0ICkge1xuICAgIHZhciBlZGdlID0gc2lmVG9Kc29uLmdldEVkZ2VCeVByb3BzKCBzcmNOYW1lLCB0eXBlLCB0Z3ROYW1lICk7XG5cbiAgICBpZiAoIGVkZ2UgPT0gdW5kZWZpbmVkICkge1xuICAgICAgdmFyIHVpZCA9IGVsZW1lbnRVdGlsaXRpZXMuZ2VuZXJhdGVFZGdlSWQoKTtcbiAgICAgIHZhciBzb3VyY2UgPSBzaWZUb0pzb24uZ2V0Tm9kZUJ5TmFtZSggc3JjTmFtZSApLmRhdGEuaWQ7XG4gICAgICB2YXIgdGFyZ2V0ID0gc2lmVG9Kc29uLmdldE5vZGVCeU5hbWUoIHRndE5hbWUgKS5kYXRhLmlkO1xuICAgICAgZWRnZSA9IHt9O1xuICAgICAgZWRnZS5kYXRhID0ge1xuICAgICAgICBpZDogdWlkLFxuICAgICAgICBwY0lEU2V0LFxuICAgICAgICBzaXRlTG9jU2V0LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHRhcmdldCxcbiAgICAgICAgY2xhc3M6IHR5cGVcbiAgICAgIH07XG5cbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuZXh0ZW5kRWRnZURhdGFXaXRoQ2xhc3NEZWZhdWx0cyggZWRnZS5kYXRhLCB0eXBlICk7XG5cbiAgICAgIHZhciBrZXkgPSBzaWZUb0pzb24uY2FsY3VsYXRlRWRnZUtleSggc3JjTmFtZSwgdHlwZSwgdGd0TmFtZSApO1xuICAgICAgc2lmVG9Kc29uLm1hcEVkZ2VUb0tleSggZWRnZSwga2V5ICk7XG4gICAgICBzaWZUb0pzb24uZ3JhcGhEYXRhLmVkZ2VzLnB1c2goIGVkZ2UgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWRnZTtcbiAgfTtcblxuICBzaWZUb0pzb24uZ2V0Tm9kZUNsYXNzID0gZnVuY3Rpb24oIGVkZ2VUeXBlLCByb2xlICkge1xuICAgIHZhciB0eXBlO1xuXG4gICAgc3dpdGNoIChlZGdlVHlwZSkge1xuICAgICAgY2FzZSAnY29udHJvbHMtcHJvZHVjdGlvbi1vZic6XG4gICAgICBjYXNlICdjb250cm9scy10cmFuc3BvcnQtb2YtY2hlbWljYWwnOlxuICAgICAgICB0eXBlID0gKCByb2xlID09PSAnc3JjJyA/ICdTSUYgbWFjcm9tb2xlY3VsZScgOiAnU0lGIHNpbXBsZSBjaGVtaWNhbCcgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb25zdW1wdGlvbi1jb250cm9sZWQtYnknOlxuICAgICAgY2FzZSAnY2hlbWljYWwtYWZmZWN0cyc6XG4gICAgICAgIHR5cGUgPSAoIHJvbGUgPT09ICdzcmMnID8gJ1NJRiBzaW1wbGUgY2hlbWljYWwnIDogJ1NJRiBtYWNyb21vbGVjdWxlJyApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3JlYWN0cy13aXRoJzpcbiAgICAgIGNhc2UgJ3VzZWQtdG8tcHJvZHVjZSc6XG4gICAgICAgIHR5cGUgPSAnU0lGIHNpbXBsZSBjaGVtaWNhbCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdHlwZSA9ICdTSUYgbWFjcm9tb2xlY3VsZSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9O1xuXG4gIHNpZlRvSnNvbi5nZXRNYXBQcm9wZXJ0eSA9IGZ1bmN0aW9uKCBwcm9wTmFtZSApIHtcbiAgICByZXR1cm4gc2lmVG9Kc29uLm1hcFByb3BlcnRpZXNUb09iaigpWyAnbWFwUHJvcGVydGllcycgXVsgcHJvcE5hbWUgXTtcbiAgfTtcblxuICBzaWZUb0pzb24ubWFwUHJvcGVydGllc1RvT2JqID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcFByb3BlcnRpZXM6IHtcbiAgICAgICAgZHluYW1pY0xhYmVsU2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgYWRqdXN0Tm9kZUxhYmVsRm9udFNpemVBdXRvbWF0aWNhbGx5OiB0cnVlXG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICByZXR1cm4gc2lmVG9Kc29uO1xufTtcbiIsImZ1bmN0aW9uIHRkUGFyc2VyKCkge1xufTtcblxudGRQYXJzZXIuZ2V0VGFic0FycmF5ID0gZnVuY3Rpb24oIGxpbmUgKSB7XG4gIHJldHVybiBsaW5lLnNwbGl0KCAnXFx0JyApO1xufTtcblxudGRQYXJzZXIuZ2V0TGluZXNBcnJheSA9IGZ1bmN0aW9uKCBjb250ZW50ICkge1xuICB2YXIgc2VwYXJhdG9yID0gL1xccj9cXG58XFxyLztcbiAgdmFyIG5vdEVtcHR5ID0gZnVuY3Rpb24oIGxpbmUgKSB7XG4gICAgcmV0dXJuIGxpbmUgIT09ICcnO1xuICB9O1xuICByZXR1cm4gY29udGVudC5zcGxpdCggc2VwYXJhdG9yICkuZmlsdGVyKCBub3RFbXB0eSApO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB0ZFBhcnNlcjtcbiIsInZhciBsaWJzYmduanMgPSByZXF1aXJlKCdsaWJzYmduLmpzJyk7XG52YXIgcGFyc2VTdHJpbmcgPSByZXF1aXJlKCd4bWwyanMnKS5wYXJzZVN0cmluZztcbnZhciBsaWJVdGlsaXRpZXMgPSByZXF1aXJlKCcuL2xpYi11dGlsaXRpZXMnKTtcbnZhciBjbGFzc2VzID0gcmVxdWlyZSgnLi9jbGFzc2VzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBlbGVtZW50VXRpbGl0aWVzO1xuXG5cdGZ1bmN0aW9uIHRkVG9Kc29uKHBhcmFtKSB7XG5cdFx0b3B0aW9uVXRpbGl0aWVzID0gcGFyYW0ub3B0aW9uVXRpbGl0aWVzO1xuXHRcdG9wdGlvbnMgPSBvcHRpb25VdGlsaXRpZXMuZ2V0T3B0aW9ucygpO1xuXHRcdGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuXHR9XG5cblx0dGRUb0pzb24ubWFwID0gdW5kZWZpbmVkO1xuXG5cdHRkVG9Kc29uLmVkZ2VUeXBlcz0geyBcblx0XHQncG9zaXRpdmUgaW5mbHVlbmNlJzogdHJ1ZSwgXG5cdFx0J25lZ2F0aXZlIGluZmx1ZW5jZSc6IHRydWUsIFxuXHRcdCd1bmtub3duIGluZmx1ZW5jZSc6IHRydWUsIFxuXHRcdCduZWNhc3NhcnkgaW5mbHVlbmNlJzogdHJ1ZSxcblx0XHQnbG9naWMgYXJjcyc6IHRydWUsIFxuXHRcdCdlcXVpdmFsYW5jZSBhcmNzJzogdHJ1ZSBcblx0fTtcblxuXHR0ZFRvSnNvbi5ub2RlVHlwZXM9IHtcblx0XHQnYmlvbG9naWNhbCBhY3Rpdml0eSc6ICdCQSBwbGFpbicsXG5cdFx0J21hY3JvbW9sZWN1bGUnOiAnQkEgbWFjcm9tb2xlY3VsZScsIFxuXHRcdCdjb21wbGV4JzogJ0JBIGNvbXBsZXgnLCBcblx0XHQnc2ltcGxlIGNoZW1pY2FsJzogJ0JBIHNpbXBsZSBjaGVtaWNhbCcsIFxuXHRcdCd1bnNwZWNpZmllZCBlbnRpdHknOiAnQkEgdW5zcGVjaWZpZWQgZW50aXR5JywgXG5cdFx0J251Y2xlaWMgYWNpZCBmZWF0dXJlJzogJ0JBIG51Y2xlaWMgYWNpZCBmZWF0dXJlJyxcblx0XHQncGVydHVyYmluZyBhZ2VudCc6J0JBIHBlcnR1cmJpbmcgYWdlbnQnLCBcblx0XHQncGhlbm90eXBlJzogJ3BoZW5vdHlwZScsIFxuXHRcdCdjb21wYXJ0bWVudCc6ICdjb21wYXJ0bWVudCcsIFxuXHRcdCdzdWJtYXAnOiAnc3VibWFwJywgXG5cdFx0J3RhZyc6ICd0YWcnLCBcblx0XHQnYW5kJzogJ2FuZCcsIFxuXHRcdCdvcic6ICdvcicsIFxuXHRcdCdub3QnOiAnbm90JywgXG5cdFx0J2RlbGF5JzogJ2RlbGF5J1xuXHR9O1xuXG5cdHRkVG9Kc29uLnZhbGlkYXRlTm9kZVR5cGUgPSBmdW5jdGlvbiggdHlwZSl7XG5cdFx0dmFyIF90eXBlID0gdHlwZS5yZXBsYWNlKC9fL2csICcgJykudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gdGhpcy5ub2RlVHlwZXMuaGFzT3duUHJvcGVydHkoX3R5cGUpO1xuXHR9O1xuXG5cdHRkVG9Kc29uLnZhbGlkYXRlRWRnZVR5cGUgPSBmdW5jdGlvbiggdHlwZSl7XG5cdFx0dmFyIF90eXBlID0gdHlwZS5yZXBsYWNlKC9fL2csICcgJykudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gdGhpcy5lZGdlVHlwZXMuaGFzT3duUHJvcGVydHkoX3R5cGUpO1xuXHR9O1xuXG5cdHRkVG9Kc29uLmNvbnZlcnRUeXBlVG9DbGFzcyA9IGZ1bmN0aW9uKCBlbGUsIHR5cGUsIGlzTm9kZSl7XG5cdFx0dmFyIF90eXBlID0gdHlwZS5yZXBsYWNlKC9fL2csICcgJykudG9Mb3dlckNhc2UoKTtcblx0XHRlbGUuZGF0YS5jbGFzcyA9IGlzTm9kZSA/IHRoaXMubm9kZVR5cGVzW190eXBlXSA6IF90eXBlO1xuXHR9O1xuXG5cdHRkVG9Kc29uLm1hcFByb3BlcnRpZXNUb09iaiA9IGZ1bmN0aW9uKCl7XG5cdFx0cmV0dXJuIHsgbWFwUHJvcGVydGllczogdGhpcy5tYXAubWFwUHJvcGVydGllc307XG5cdH07XG5cblx0LyoqXG5cdCAqIEFkZHMgc3RhdGVzIGFuZCBpbmZvYm94IGluZm9ybWF0aW9uIHRvIGdpdmVuIG5vZGVcblx0ICogQHBhcmFtIG5vZGUgOiBhIG5vZGUgb2JqZWN0XG5cdCAqL1xuXHR0ZFRvSnNvbi5hZGRJbmZvQm94ID0gZnVuY3Rpb24obm9kZSl7XG5cdFx0dmFyIF9jbGFzcyA9IG5vZGUuZGF0YS5jbGFzcztcblx0XHRpZiAoX2NsYXNzLnN0YXJ0c1dpdGgoXCJCQVwiKSAmJiBfY2xhc3MgIT0gXCJCQSBwbGFpblwiKXtcblx0XHRcdHZhciB1bml0T2ZJbmZvcm1hdGlvbiA9IGNsYXNzZXMuVW5pdE9mSW5mb3JtYXRpb24uY29uc3RydWN0KCk7XG5cdFx0XHR1bml0T2ZJbmZvcm1hdGlvbi5wYXJlbnQgPSBub2RlLmRhdGEuaWQ7XG5cdFx0XHQvLyBmaWxlIGZvcm1hdCBkb2VzIG5vdCBjb250YWluIGJib3ggaW5mb3JtYXRpb24sIGhlbmNlIGRlZmluZSB0aGVtIGJlbG93XG5cdFx0XHR1bml0T2ZJbmZvcm1hdGlvbi5iYm94ID0ge3g6IDI1LCB5OiAtNTAsIHc6IDMwLCBoOiAxMn07XG5cdFx0XHRjbGFzc2VzLlVuaXRPZkluZm9ybWF0aW9uLnNldEFuY2hvclNpZGUodW5pdE9mSW5mb3JtYXRpb24pO1xuXHRcdFx0bm9kZS5kYXRhLnN0YXRlc2FuZGluZm9zID0gW3VuaXRPZkluZm9ybWF0aW9uXTtcblx0XHR9IGVsc2V7XG5cdFx0XHRub2RlLmRhdGEuc3RhdGVzYW5kaW5mb3MgPSBbXTtcblx0XHR9XG5cdH1cblxuXHR0ZFRvSnNvbi5jb252ZXJ0ID0gZnVuY3Rpb24oIGdyYXBoVGV4dCl7XG5cdFx0ZWxlbWVudFV0aWxpdGllcy5maWxlRm9ybWF0ID0gJ3RkJztcblx0XHRpZiggZ3JhcGhUZXh0ID09PSB1bmRlZmluZWQpXG5cdFx0e1xuXHRcdFx0cmV0dXJuIHsgbm9kZXM6IFtdLCBlZGdlczogW119O1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdHZhciBtYXAgPSB7fTtcblx0XHRcdHZhciBub2RlcyA9IFtdOyAvL0hvbGRzIG5vZGVzXG5cdFx0XHR2YXIgZWRnZXMgPSBbXTsgLy9Ib2xkcyBlZGdlc1xuXHRcdFx0dGhpcy5tYXAgPSBtYXA7XG5cblx0XHRcdC8vRGVmaW5lIHRoZSBsaW5lIHNlcGFyYXRvclxuXHRcdFx0Ly8gXFxyXFxuLCBcXG4gYW5kIFxcciBsaW5lIHNlcGFyYXRvcnNcblx0XHRcdHZhciBzZXBhcmF0b3IgPSAvXFxyP1xcbnxcXHIvO1xuXHRcdFx0dmFyIGxpbmVzID0gZ3JhcGhUZXh0LnRvU3RyaW5nKCkuc3BsaXQoIHNlcGFyYXRvcik7XG5cdFx0XHR2YXIgZ3JhcGhEYXRhSW5kZXggPSA0OyAvL2dyYXBoIGRhdGEgc3RhcnRzIGF0IGluZGV4IDRcblx0XHRcdHZhciBlZGdlc1N0YXJ0SW5kZXggPSAtMTsgLy91bmtvd24gYXQgdGhlIGJlZ2luaW5nXG5cblx0XHRcdHZhciBmb3JtYXRWZXJzaW9uID0gbGluZXNbMF07XG5cblx0XHRcdGlmKCBmb3JtYXRWZXJzaW9uLmxlbmd0aCA8IDEwIHx8IGZvcm1hdFZlcnNpb24uc3Vic3RyaW5nKDAsMTApLnRvTG93ZXJDYXNlKCkgIT0gJ3NiZ252aXogYWYnKVxuXHRcdFx0e1xuXHRcdFx0XHR0aHJvdyBcIldyb25nIGZpbGUgZm9ybWF0IVwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiggZm9ybWF0VmVyc2lvbi5sZW5ndGggPT0gMTApe1xuXHRcdFx0XHRmb3JtYXRWZXJzaW9uID0gZm9ybWF0VmVyc2lvbiArIFwiIDEuMFwiOyAvL2RlZmF1bHQgMS4wXG5cdFx0XHR9XG5cdFx0XHR2YXIgdGl0bGUgPSBsaW5lc1sxXTtcblx0XHRcdHZhciBkZXNjcmlwdGlvbiA9IGxpbmVzWzJdO1xuXHRcdFx0Ly9TZWNvbmQgZWxlbWVudCBvZiB0aGUgZm9ybWF0IHZlcnNpb24gc3BlY2lmaWVzIG1hcCBsYW5ndWFnZVxuXHRcdFx0dmFyIG1hcExhbmd1YWdlID0gKGZvcm1hdFZlcnNpb24udG9TdHJpbmcoKS5zcGxpdChcIiBcIikpWzFdOyBcblx0XHRcdGVsZW1lbnRVdGlsaXRpZXMubWFwVHlwZSA9IG1hcExhbmd1YWdlO1xuXHRcdFx0bWFwLm1hcFByb3BlcnRpZXMgPSB7fTtcblx0XHRcdG1hcC5tYXBQcm9wZXJ0aWVzLm1hcERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG5cdFx0XHRtYXAubWFwUHJvcGVydGllcy5tYXBOYW1lID0gdGl0bGU7XG5cdFx0XHQvL3N0YXJ0IHRvIHBhcnNlIHRoZSBncmFwaFxuXHRcdFx0Zm9yKCB2YXIgaSA9IGdyYXBoRGF0YUluZGV4OyBpIDwgbGluZXMubGVuZ3RoOyBpKyspe1xuXG5cdFx0XHRcdC8vYmxhbmsgbGluZSBpbmRpY2F0ZXMgdGhhdCBub2RlcyBhcmUgZmluaXNoZWRcblx0XHRcdFx0Ly9zbyBjb250aW51ZSB3aXRoIGVkZ2VzXG5cdFx0XHRcdGlmKCBsaW5lc1tpXS5sZW5ndGggPT09IDAgfHwgbGluZXNbaV0gPT09IFwiXCIpe1xuXHRcdFx0XHRcdHdoaWxlKCBsaW5lc1tpXSA9PT0gXCJcIiAmJiBpIDwgbGluZXMubGVuZ3RoKXtcblx0XHRcdFx0XHRcdFx0aSsrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlZGdlc1N0YXJ0SW5kZXggPSBpICsgMjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vUGFyc2UgdGhlIG5vZGUgZGF0YVxuXHRcdFx0XHR2YXIgZGF0YSA9IGxpbmVzW2ldLnRvU3RyaW5nKCkuc3BsaXQoJ1xcdCcpOyAvL2VhY2ggZGF0YSBzZXBlcmF0ZWQgYnkgdGFiXG5cdFx0XHRcdHZhciBub2RlTmFtZSA9IGRhdGFbMF07XG5cblx0XHRcdFx0Ly9JZiB0aGVyZSBpcyBubyBibGFuayBsaW5lXG5cdFx0XHRcdGlmKCBub2RlTmFtZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT0gJy0tZWRnZV9pZCcpe1xuXHRcdFx0XHRcdGVkZ2VzU3RhcnRJbmRleCA9IGkgKyAxO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG5vZGVJZCA9IGRhdGFbMV07XG5cdFx0XHRcdHZhciBub2RlVHlwZSA9IGRhdGFbMl07XG5cdFx0XHRcdHZhciBwYXJlbnRJRCA9IGRhdGFbM107XG5cdFx0XHRcdHZhciBwb3NYID0gKCBkYXRhLmxlbmd0aCA+IDQpID8gZGF0YVs0XSA6IFwiMFwiOyAvL2lmIHBvc1ggbm90IGdpdmVuXG5cdFx0XHRcdHZhciBwb3NZID0gKCBkYXRhLmxlbmd0aCA+IDUpID8gZGF0YVs1XSA6IFwiMFwiOyAvL2lmIHBvc1kgbm90IGdpdmVuXG5cdFx0XHRcdHZhciBub2RlV2lkdGggPSAoIGRhdGEubGVuZ3RoID4gNikgPyBkYXRhWzZdIDogdW5kZWZpbmVkO1xuXHRcdFx0XHR2YXIgbm9kZUhlaWdodCA9ICggZGF0YS5sZW5ndGggPiA3KSA/IGRhdGFbN10gOiB1bmRlZmluZWQ7XG5cblx0XHRcdFx0Ly9hZGQgcGFyc2VkIE5vZGVcblx0XHRcdFx0dmFyIG5ld05vZGUgPSB7XG5cdFx0XHRcdFx0Z3JvdXA6ICdub2RlcycsXG5cdFx0XHRcdFx0ZGF0YTpcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRpZDogbm9kZUlkLFxuXHRcdFx0XHRcdFx0bGFiZWw6IG5vZGVOYW1lLFxuXHRcdFx0XHRcdFx0cG9ydHM6IFtdLFxuXHRcdFx0XHRcdFx0YmJveDoge1xuXHRcdFx0XHRcdFx0XHR4OiBwYXJzZUZsb2F0KCBwb3NYKSxcblx0XHRcdFx0XHRcdFx0eTogcGFyc2VGbG9hdCggcG9zWSksXG5cdFx0XHRcdFx0XHRcdHc6IG5vZGVXaWR0aCxcblx0XHRcdFx0XHRcdFx0aDogbm9kZUhlaWdodFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYoIHRoaXMudmFsaWRhdGVOb2RlVHlwZSggbm9kZVR5cGUpKXtcblx0XHRcdFx0XHR0aGlzLmNvbnZlcnRUeXBlVG9DbGFzcyggbmV3Tm9kZSwgbm9kZVR5cGUsIHRydWUpO1xuXHRcdFx0XHRcdHRoaXMuYWRkSW5mb0JveChuZXdOb2RlKTtcblx0XHRcdFx0fSBlbHNle1xuXHRcdFx0XHRcdHRocm93IFwiTm9kZSB0eXBlIG1pc21hdGNoZWQuLi5cIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCBwYXJlbnRJRCAhPSAnLTEnKXtcblx0XHRcdFx0XHRuZXdOb2RlLmRhdGEucGFyZW50ID0gcGFyZW50SUQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIG5ld05vZGUuZGF0YS5jbGFzcyApIHtcblx0XHRcdFx0XHRlbGVtZW50VXRpbGl0aWVzLmV4dGVuZE5vZGVEYXRhV2l0aENsYXNzRGVmYXVsdHMoIG5ld05vZGUuZGF0YSwgbmV3Tm9kZS5kYXRhLmNsYXNzICk7XG5cblx0XHRcdFx0XHRpZiAoICFuZXdOb2RlLmRhdGEuYmJveC53IHx8ICFuZXdOb2RlLmRhdGEuYmJveC5oICkge1xuXHRcdFx0XHRcdFx0dmFyIGRlZmF1bHRzID0gZWxlbWVudFV0aWxpdGllcy5nZXREZWZhdWx0UHJvcGVydGllcyggbmV3Tm9kZS5kYXRhLmNsYXNzICk7XG5cdFx0XHRcdFx0XHRuZXdOb2RlLmRhdGEuYmJveC53ID0gbmV3Tm9kZS5kYXRhLmJib3gudyB8fCBkZWZhdWx0cy53aWR0aDtcblx0XHRcdFx0XHRcdG5ld05vZGUuZGF0YS5iYm94LmggPSBuZXdOb2RlLmRhdGEuYmJveC5oIHx8IGRlZmF1bHRzLmhlaWdodDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub2Rlcy5wdXNoKG5ld05vZGUpO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vU3RhcnQgcGFyc2luZyBlZGdlc1xuXHRcdFx0Zm9yKCB2YXIgaSA9IGVkZ2VzU3RhcnRJbmRleDsgaSA8IGxpbmVzLmxlbmd0aCA7IGkrKyl7XG5cdFx0XHRcdC8vRU9GIGZpbmlzaCBsb29wXG5cdFx0XHRcdGlmKCBsaW5lc1tpXS5sZW5ndGggPT09IDApe1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBkYXRhID0gbGluZXNbaV0udG9TdHJpbmcoKS5zcGxpdCgnXFx0Jyk7XG5cdFx0XHRcdHZhciBlZGdlSUQgPSBkYXRhWzBdO1xuXHRcdFx0XHR2YXIgZWRnZVNvdXJjZSA9IGRhdGFbMV07XG5cdFx0XHRcdHZhciBlZGdlVGFyZ2V0ID0gZGF0YVsyXTtcblx0XHRcdFx0dmFyIGVkZ2VUeXBlID0gZGF0YVszXTtcblxuXHRcdFx0XHR2YXIgbmV3RWRnZSA9IHtcblx0XHRcdFx0XHRncm91cDogJ2VkZ2VzJyxcblx0XHRcdFx0XHRkYXRhOlxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGlkOiBlZGdlSUQsXG5cdFx0XHRcdFx0XHRzb3VyY2U6IGVkZ2VTb3VyY2UsXG5cdFx0XHRcdFx0XHR0YXJnZXQ6IGVkZ2VUYXJnZXRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0aWYoIHRoaXMudmFsaWRhdGVFZGdlVHlwZSggZWRnZVR5cGUpKVxuXHRcdFx0XHRcdHRoaXMuY29udmVydFR5cGVUb0NsYXNzKCBuZXdFZGdlLCBlZGdlVHlwZSk7XG5cdFx0XHRcdGVsc2V7XG5cdFx0XHRcdFx0dGhyb3cgXCJFZGdlIFR5cGUgbWlzbWF0Y2hlZC4uLlwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZWxlbWVudFV0aWxpdGllcy5leHRlbmRFZGdlRGF0YVdpdGhDbGFzc0RlZmF1bHRzKCBuZXdFZGdlLmRhdGEsIG5ld0VkZ2UuZGF0YS5jbGFzcyApO1xuXG5cdFx0XHRcdGVkZ2VzLnB1c2goIG5ld0VkZ2UpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGpzR3JhcGggPSB7fTtcblx0XHRcdGpzR3JhcGgubm9kZXMgPSBub2Rlcztcblx0XHRcdGpzR3JhcGguZWRnZXMgPSBlZGdlcztcblx0XHRcdHJldHVybiBqc0dyYXBoO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gdGRUb0pzb247XG59O1xuIiwiLypcbiAqIFRleHQgdXRpbGl0aWVzIGZvciBjb21tb24gdXNhZ2VcbiAqL1xuXG52YXIgdGV4dFV0aWxpdGllcyA9IHtcbiAgLy8gc2FtZSBwdXJwb3NlIGFzIHByZXZpb3VzIG9uZSwgYnV0IHdpdGggY2xlYXJlciByZXNwb25zaWJpbGl0eVxuICB0cnVuY2F0ZTogZnVuY3Rpb24odGV4dCwgZm9udCwgd2lkdGgpIHtcbiAgICB0ZXh0ID0gdGV4dCArIFwiXCI7XG4gICAgdmFyIGNvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgY29udGV4dC5mb250ID0gZm9udDtcbiAgICAvLyBjaGVjayB0cml2aWFsIGNhc2UgZmlyc3QsIHdoZW4gZW50aXJlIHRleHQgaXMgYWxyZWFkeSBzbWFsbCBlbm91Z2hcbiAgICBpZihjb250ZXh0Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoIDwgd2lkdGgpIHtcbiAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBlbGxpcHNpcyA9IFwiLi5cIjtcbiAgICAgIC8vIGlmIGVsbGlwc2lzIGFsb25lIGlzIGFscmVhZHkgdG9vIGxhcmdlXG4gICAgICBpZihjb250ZXh0Lm1lYXN1cmVUZXh0KGVsbGlwc2lzKS53aWR0aCA+IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmluYWxMZW5ndGg7IC8vIHRoaXMgc2hvdWxkIGFsd2F5cyBoYXZlIGEgdmFsdWUgYWZ0ZXIgdGhlIGxvb3BcbiAgICAgIGZvcih2YXIgaT0wOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgc3VidGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIGkpICsgZWxsaXBzaXM7XG4gICAgICAgIGlmIChjb250ZXh0Lm1lYXN1cmVUZXh0KHN1YnRleHQpLndpZHRoID4gd2lkdGgpIHsgLy8gd2UncmUgdG9vIGZhciwgdGFrZSB0aGUgcHJldmlvdXMgaW5kZXhcbiAgICAgICAgICBmaW5hbExlbmd0aCA9IGkgPiAwID8gaS0xIDogMDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKDAsIGZpbmFsTGVuZ3RoKSArIGVsbGlwc2lzO1xuICAgIH1cbiAgfSxcblxuICAvLyBlbnN1cmUgdGhhdCByZXR1cm5lZCBzdHJpbmcgZm9sbG93cyB4c2Q6SUQgc3RhbmRhcmRcbiAgLy8gc2hvdWxkIGZvbGxvdyByJ15bYS16QS1aX11bXFx3Li1dKiQnXG4gIGdldFhNTFZhbGlkSWQ6IGZ1bmN0aW9uKG9yaWdpbmFsSWQpIHtcbiAgICB2YXIgbmV3SWQgPSBcIlwiO1xuICAgIHZhciB4bWxWYWxpZFJlZ2V4ID0gL15bYS16QS1aX11bXFx3Li1dKiQvO1xuICAgIGlmICghIHhtbFZhbGlkUmVnZXgudGVzdChvcmlnaW5hbElkKSkgeyAvLyBkb2Vzbid0IGNvbXBseVxuICAgICAgbmV3SWQgPSBvcmlnaW5hbElkO1xuICAgICAgbmV3SWQgPSBuZXdJZC5yZXBsYWNlKC9bXlxcdy4tXS9nLCBcIlwiKTtcbiAgICAgIGlmICghIHhtbFZhbGlkUmVnZXgudGVzdChuZXdJZCkpIHsgLy8gc3RpbGwgZG9lc24ndCBjb21wbHlcbiAgICAgICAgbmV3SWQgPSBcIl9cIiArIG5ld0lkO1xuICAgICAgICBpZiAoISB4bWxWYWxpZFJlZ2V4LnRlc3QobmV3SWQpKSB7IC8vIG5vcm1hbGx5IHdlIHNob3VsZCBuZXZlciBlbnRlciB0aGlzXG4gICAgICAgICAgLy8gaWYgZm9yIHNvbWUgb2JzY3VyZSByZWFzb24gd2Ugc3RpbGwgZG9uJ3QgY29tcGx5LCB0aHJvdyBlcnJvci5cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBtYWtlIGlkZW50aWZlciBjb21wbHkgdG8geHNkOklEIHJlcXVpcmVtZW50czogXCIrbmV3SWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3SWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIG9yaWdpbmFsSWQ7XG4gICAgfVxuICB9LFxuXG4gIGdldFdpZHRoQnlDb250ZW50KCBjb250ZW50LCBmb250RmFtaWx5LCBmb250U2l6ZSwgb3B0aW9ucyApIHtcbiAgICB2YXIgREVGQVVMVF9NQVJHSU4gPSA1O1xuICAgIHZhciBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIik7XG4gICAgdmFyIGNvbnRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuICAgIC8vIHNob3VsZCBub3QgbWFrZSB0eXBlIGNoZWNrIHNvICc9PT0nIHNob3VsZCBub3QgYmUgdXNlZCBoZXJlXG4gICAgdmFyIHNob3VsZEFwcGVuZCA9IHBhcnNlRmxvYXQoIGZvbnRTaXplICkgPT0gZm9udFNpemU7XG4gICAgdmFyIHZhbGlkRm9udFNpemUgPSBzaG91bGRBcHBlbmQgPyBmb250U2l6ZSArICdweCcgOiBmb250U2l6ZTtcbiAgICBjb250ZXh0LmZvbnQgPSB2YWxpZEZvbnRTaXplICsgJyAnICsgZm9udEZhbWlseTtcblxuICAgIHZhciB3aWR0aCA9IDA7XG5cbiAgICBsaW5lcy5mb3JFYWNoKCBmdW5jdGlvbiggbGluZSApIHtcbiAgICAgIHZhciB3ID0gY29udGV4dC5tZWFzdXJlVGV4dChsaW5lKS53aWR0aDtcbiAgICAgIGlmICggdyA+IHdpZHRoICkge1xuICAgICAgICB3aWR0aCA9IHc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgbWFyZ2luID0gb3B0aW9ucyAmJiBvcHRpb25zLm1hcmdpbjtcbiAgICBpZiAoIG1hcmdpbiA9PSBudWxsICkge1xuICAgICAgbWFyZ2luID0gREVGQVVMVF9NQVJHSU47XG4gICAgfVxuXG4gICAgd2lkdGggKz0gMiAqIG1hcmdpbjtcblxuICAgIHZhciBtaW4gPSBvcHRpb25zICYmIG9wdGlvbnMubWluO1xuICAgIHZhciBtYXggPSBvcHRpb25zICYmIG9wdGlvbnMubWF4O1xuXG4gICAgaWYgKCBtaW4gIT0gbnVsbCAmJiB3aWR0aCA8IG1pbiApIHtcbiAgICAgIHdpZHRoID0gbWluO1xuICAgIH1cbiAgICBlbHNlIGlmICggbWF4ICE9IG51bGwgJiYgd2lkdGggPiBtYXggKSB7XG4gICAgICB3aWR0aCA9IG1heDtcbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGg7XG4gIH0sXG5cbiAgRnJvbUtlYmFiVG9DYW1lbENhc2UgOiBmdW5jdGlvbihpbnB1dCl7XG4gICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoLygtXFx3KS9nLCBmdW5jdGlvbihtKXtcbiAgICAgIHJldHVybiBtWzFdLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgRnJvbUNhbWVsVG9LZWJhYkNhc2UgOiBmdW5jdGlvbihpbnB1dCl7XG4gICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1tcXHddKFtBLVpdKS9nLCBmdW5jdGlvbihtKSB7XG4gICAgICByZXR1cm4gbVswXSArIFwiLVwiICsgbVsxXTtcbiAgICB9KS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gdGV4dFV0aWxpdGllcztcbiIsIi8qXG4qIENvbW1vbmx5IG5lZWRlZCBVSSBVdGlsaXRpZXNcbiovXG5cbnZhciBsaWJVdGlsaXRpZXMgPSByZXF1aXJlKCcuL2xpYi11dGlsaXRpZXMnKTtcbnZhciBsaWJzID0gbGliVXRpbGl0aWVzLmdldExpYnMoKTtcbnZhciBqUXVlcnkgPSAkID0gbGlicy5qUXVlcnk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuXG4gdmFyIG9wdGlvblV0aWxpdGllcztcbiB2YXIgb3B0aW9ucztcblxuIGZ1bmN0aW9uIHVpVXRpbGl0aWVzIChwYXJhbSkge1xuICAgb3B0aW9uVXRpbGl0aWVzID0gcGFyYW0ub3B0aW9uVXRpbGl0aWVzO1xuICAgb3B0aW9ucyA9IG9wdGlvblV0aWxpdGllcy5nZXRPcHRpb25zKCk7XG4gfVxuXG4gdWlVdGlsaXRpZXMuc3RhcnRTcGlubmVyID0gZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgY2xhc3NOYW1lID0gJ2RlZmF1bHQtY2xhc3MnO1xuICAgfVxuXG4gICBpZiAoJCgnLicgKyBjbGFzc05hbWUpLmxlbmd0aCA9PT0gMCkge1xuICAgICB2YXIgY29udGFpbmVyV2lkdGggPSAkKG9wdGlvbnMubmV0d29ya0NvbnRhaW5lclNlbGVjdG9yKS53aWR0aCgpO1xuICAgICB2YXIgY29udGFpbmVySGVpZ2h0ID0gJChvcHRpb25zLm5ldHdvcmtDb250YWluZXJTZWxlY3RvcikuaGVpZ2h0KCk7XG4gICAgICQob3B0aW9ucy5uZXR3b3JrQ29udGFpbmVyU2VsZWN0b3IgKyAnOnBhcmVudCcpLnByZXBlbmQoJzxpIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB6LWluZGV4OiA5OTk5OTk5OyBsZWZ0OiAnICsgY29udGFpbmVyV2lkdGggLyAyICsgJ3B4OyB0b3A6ICcgKyBjb250YWluZXJIZWlnaHQgLyAyICsgJ3B4O1wiIGNsYXNzPVwiZmEgZmEtc3Bpbm5lciBmYS1zcGluIGZhLTN4IGZhLWZ3ICcgKyBjbGFzc05hbWUgKyAnXCI+PC9pPicpO1xuICAgfVxuIH07XG5cbiB1aVV0aWxpdGllcy5lbmRTcGlubmVyID0gZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xuICAgaWYgKCFjbGFzc05hbWUpIHtcbiAgICAgY2xhc3NOYW1lID0gJ2RlZmF1bHQtY2xhc3MnO1xuICAgfVxuXG4gICBpZiAoJCgnLicgKyBjbGFzc05hbWUpLmxlbmd0aCA+IDApIHtcbiAgICAgJCgnLicgKyBjbGFzc05hbWUpLnJlbW92ZSgpO1xuICAgfVxuIH07XG5cbiByZXR1cm4gdWlVdGlsaXRpZXM7XG59O1xuIiwiLypcbiAqIFRoaXMgZmlsZSBleHBvcnRzIHRoZSBmdW5jdGlvbnMgdG8gYmUgdXRpbGl6ZWQgaW4gdW5kb3JlZG8gZXh0ZW5zaW9uIGFjdGlvbnNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcblxuICB2YXIgZWxlbWVudFV0aWxpdGllcztcbiAgdmFyIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5O1xuICB2YXIgbWFpblV0aWxpdGllcztcbiAgdmFyIGN5O1xuXG4gIGZ1bmN0aW9uIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zIChwYXJhbSkge1xuICAgIGVsZW1lbnRVdGlsaXRpZXMgPSBwYXJhbS5lbGVtZW50VXRpbGl0aWVzO1xuICAgIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5ID0gcGFyYW0uZXhwZXJpbWVudGFsRGF0YU92ZXJsYXk7XG4gICAgbWFpblV0aWxpdGllcyA9IHBhcmFtLm1haW5VdGlsaXRpZXM7XG4gICAgY3kgPSBwYXJhbS5zYmduQ3lJbnN0YW5jZS5nZXRDeSgpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuZGVsZXRlRWxlc1NpbXBsZSA9IGZ1bmN0aW9uIChwYXJhbSkge1xuICAgIHJldHVybiBlbGVtZW50VXRpbGl0aWVzLmRlbGV0ZUVsZXNTaW1wbGUocGFyYW0uZWxlcyk7XG4gIH07XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVzdG9yZUVsZXMgPSBmdW5jdGlvbiAoZWxlcykge1xuICAgIHZhciBwYXJhbSA9IHt9O1xuICAgIHBhcmFtLmVsZXMgPSBlbGVtZW50VXRpbGl0aWVzLnJlc3RvcmVFbGVzKGVsZXMpO1xuICAgIHJldHVybiBwYXJhbTtcbiAgfTtcblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5kZWxldGVOb2Rlc1NtYXJ0ID0gZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgaWYgKHBhcmFtLmZpcnN0VGltZSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZGVsZXRlTm9kZXNTbWFydChwYXJhbS5lbGVzKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRVdGlsaXRpZXMuZGVsZXRlRWxlc1NpbXBsZShwYXJhbS5lbGVzKTtcbiAgfTtcblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5zZXRQb3J0c09yZGVyaW5nID0gZnVuY3Rpb24ocGFyYW0pIHtcbiAgICB2YXIgbm9kZXMgPSBwYXJhbS5ub2RlcztcbiAgICB2YXIgb3JkZXJpbmcgPSBwYXJhbS5vcmRlcmluZztcbiAgICB2YXIgcG9ydERpc3RhbmNlID0gcGFyYW0ucG9ydERpc3RhbmNlO1xuICAgIHZhciBjb25uZWN0ZWRFZGdlcyA9IG5vZGVzLmNvbm5lY3RlZEVkZ2VzKCk7XG4gICAgdmFyIG5vZGVQcm9wTWFwID0ge307IC8vIE5vZGUgcHJvcCBtYXAgZm9yIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBub2RlcyBpdCBpcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgcmVzdWx0IG1hcC4gSXQgaW5jbHVkZXMgbm9kZSBjdXJyZW50IHBvcnQgb3JkZXJpbmcgYW5kIGN1cnJlbnQgcG9ydHMuXG4gICAgdmFyIGVkZ2VQcm9wTWFwID0ge307IC8vIEVkZ2UgcHJvcCBtYXAgZm9yIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBub2RlcyBpdCBpcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgcmVzdWx0IG1hcC4gSXQgaW5jbHVkZXMgZWRnZSBwb3J0c291cmNlIGFuZCBwb3J0dGFyZ2V0LlxuXG4gICAgLy8gRmlsbCBub2RlL2VkZ2UgcHJvcCBtYXBzIGZvciB1bmRvL3JlZG8gYWN0aW9uc1xuXG4gICAgLy8gTm9kZSBwcm9wIG1hcCBpbmNsdWRlcyBhIGNvcHkgb2Ygbm9kZSBwb3J0c1xuICAgIGZvciAoIHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgIHZhciBwb3J0cyA9IG5vZGUuZGF0YSgncG9ydHMnKTtcbiAgICAgIHZhciBjdXJyZW50T3JkZXJpbmcgPSBlbGVtZW50VXRpbGl0aWVzLmdldFBvcnRzT3JkZXJpbmcobm9kZSk7IC8vIEdldCB0aGUgY3VycmVudCBub2RlIHBvcnRzIG9yZGVyaW5nXG4gICAgICB2YXIgcG9ydHNDb3B5ID0gcG9ydHMubGVuZ3RoID09PSAyID8gWyB7IGlkOiBwb3J0c1swXS5pZCwgeDogcG9ydHNbMF0ueCwgeTogcG9ydHNbMF0ueSB9LCB7IGlkOiBwb3J0c1sxXS5pZCwgeDogcG9ydHNbMV0ueCwgeTogcG9ydHNbMV0ueSB9IF0gOiBbXTtcbiAgICAgIG5vZGVQcm9wTWFwW25vZGUuaWQoKV0gPSB7IG9yZGVyaW5nOiBjdXJyZW50T3JkZXJpbmcsIHBvcnRzOiBwb3J0c0NvcHkgfTtcbiAgICB9XG5cbiAgICAvLyBOb2RlIHByb3AgbWFwIGluY2x1ZGVzIGVkZ2UgcG9ydHNvdXJjZSBhbmQgcG9ydHRhcmdldFxuICAgIGZvciAoIHZhciBpID0gMDsgaSA8IGNvbm5lY3RlZEVkZ2VzLmxlbmd0aDsgaSsrICkge1xuICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRFZGdlc1tpXTtcbiAgICAgIGVkZ2VQcm9wTWFwW2VkZ2UuaWQoKV0gPSB7IHBvcnRzb3VyY2U6IGVkZ2UuZGF0YSgncG9ydHNvdXJjZScpLCBwb3J0dGFyZ2V0OiBlZGdlLmRhdGEoJ3BvcnR0YXJnZXQnKSB9O1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB7XG4gICAgICBub2Rlczogbm9kZXMsXG4gICAgICBub2RlUHJvcE1hcDogbm9kZVByb3BNYXAsXG4gICAgICBlZGdlUHJvcE1hcDogZWRnZVByb3BNYXBcbiAgICB9O1xuXG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSBjYWxsIHJlbGF0ZWQgbWV0aG9kIGZyb20gZWxlbWVudCB1dGlsaXRpZXMgZWxzZSBnbyBiYWNrIHRvIHRoZSBzdG9yZWQgcHJvcHMgb2Ygbm9kZXMvZWRnZXNcbiAgICBpZiAoIHBhcmFtLmZpcnN0VGltZSApIHtcbiAgICAgIGVsZW1lbnRVdGlsaXRpZXMuc2V0UG9ydHNPcmRlcmluZyhub2Rlcywgb3JkZXJpbmcsIHBvcnREaXN0YW5jZSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY3kuc3RhcnRCYXRjaCgpO1xuXG4gICAgICAvLyBHbyBiYWNrIHRvIHN0b3JlZCBub2RlIHBvcnRzIHN0YXRlXG4gICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgdmFyIHBvcnRzVG9SZXR1cm4gPSBwYXJhbS5ub2RlUHJvcE1hcFtub2RlLmlkKCldLnBvcnRzO1xuICAgICAgICB2YXIgb3JkZXJpbmdzVG9SZXR1cm4gPSBwYXJhbS5ub2RlUHJvcE1hcFtub2RlLmlkKCldLm9yZGVyaW5nO1xuICAgICAgICBub2RlLmRhdGEoJ3BvcnRzJywgcG9ydHNUb1JldHVybik7XG4gICAgICAgIG5vZGUuZGF0YSgncG9ydHNvcmRlcmluZycsIG9yZGVyaW5nc1RvUmV0dXJuKTsgLy8gVXBkYXRlIHRoZSBjYWNoZWQgcG9ydHMgb3JkZXJpbmdcbiAgICAgIH1cblxuICAgICAgLy8gR28gYmFjayB0byBzdG9yZWQgZWRnZSBwb3J0c291cmNlL3BvcnR0YXJnZXRzIHN0YXRlXG4gICAgICBmb3IgKCB2YXIgaSA9IDA7IGkgPCBjb25uZWN0ZWRFZGdlcy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgdmFyIGVkZ2UgPSBjb25uZWN0ZWRFZGdlc1tpXTtcbiAgICAgICAgdmFyIHByb3BzID0gcGFyYW0uZWRnZVByb3BNYXBbZWRnZS5pZCgpXTtcbiAgICAgICAgZWRnZS5kYXRhKCdwb3J0c291cmNlJywgcHJvcHMucG9ydHNvdXJjZSk7XG4gICAgICAgIGVkZ2UuZGF0YSgncG9ydHRhcmdldCcsIHByb3BzLnBvcnR0YXJnZXQpO1xuICAgICAgfVxuXG4gICAgICBjeS5lbmRCYXRjaCgpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuaGlkZUV4cCA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgZXhwTmFtZSA9IHBhcmFtLmV4cE5hbWU7XG4gICAgdmFyIGZpbGVOYW1lID0gcGFyYW0uZmlsZU5hbWU7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmhpZGVFeHAoZmlsZU5hbWUsIGV4cE5hbWUpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5oaWRlRXhwID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBleHBOYW1lID0gcGFyYW0uZXhwTmFtZTtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkudW5oaWRlRXhwKGZpbGVOYW1lLCBleHBOYW1lKTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmhpZGVBbGwgPSBmdW5jdGlvbigpe1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5oaWRlQWxsKCk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlQWxsVW5kbyA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgaW52aXNpYmxlRmlsZSA9IHBhcmFtLmludmlzaWJsZUZpbGU7XG4gICAgdmFyIGludmlzaWJsZUV4cCA9IHBhcmFtLmludmlzaWJsZUV4cDtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaGlkZUFsbFVuZG8oaW52aXNpYmxlRmlsZSwgaW52aXNpYmxlRXhwKTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLnVuaGlkZUFsbCA9IGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnVuaGlkZUFsbCgpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5oaWRlQWxsVW5kbyA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgdmlzaWJsZUZpbGUgPSBwYXJhbS52aXNpYmxlRmlsZTtcbiAgICB2YXIgdmlzaWJsZUV4cCA9IHBhcmFtLnZpc2libGVFeHA7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnVuaGlkZUZpbGVVbmRvKHZpc2libGVGaWxlLCB2aXNpYmxlRXhwKTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmhpZGVGaWxlID0gZnVuY3Rpb24ocGFyYW0pe1xuICAgIHZhciBmaWxlTmFtZSA9IHBhcmFtLmZpbGVOYW1lO1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5oaWRlRmlsZShmaWxlTmFtZSk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5oaWRlRmlsZVVuZG8gPSBmdW5jdGlvbihwYXJhbSl7XG4gICAgdmFyIGZpbGVOYW1lID0gcGFyYW0uZmlsZU5hbWU7XG4gICAgdmFyIGludmlzaWJsZSA9IHBhcmFtLmludmlzaWJsZTtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuaGlkZUZpbGVVbmRvKGZpbGVOYW1lLCBpbnZpc2libGUpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMudW5oaWRlRmlsZSA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkudW5oaWRlRmlsZShmaWxlTmFtZSk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy51bmhpZGVGaWxlVW5kbyA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICB2YXIgdmlzaWJsZSA9IHBhcmFtLnZpc2libGU7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnVuaGlkZUZpbGVVbmRvKGZpbGVOYW1lLCB2aXNpYmxlKTtcbiAgfVxuXG4gIHVuZG9SZWRvQWN0aW9uRnVuY3Rpb25zLmFkZEV4cCA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICB2YXIgZXhwTmFtZSA9IHBhcmFtLmV4cE5hbWU7XG4gICAgdmFyIGlzVmlzaWJsZSA9IHBhcmFtLmlzVmlzaWJsZTtcbiAgICB2YXIgdmFsdWVzID0gcGFyYW0udmFsdWVzO1xuICAgIHZhciBncm91cEFycmF5ID0gcGFyYW0uZ3JvdXBBcnJheTtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkuYWRkRXhwKGZpbGVOYW1lLCBleHBOYW1lLCBpc1Zpc2libGUsIHZhbHVlcywgZ3JvdXBBcnJheSk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVFeHAgPSBmdW5jdGlvbihwYXJhbSl7XG4gICAgdmFyIGZpbGVOYW1lID0gcGFyYW0uZmlsZU5hbWU7XG4gICAgdmFyIGV4cE5hbWUgPSBwYXJhbS5leHBOYW1lO1xuICAgIHJldHVybiBleHBlcmltZW50YWxEYXRhT3ZlcmxheS5yZW1vdmVFeHAoZmlsZU5hbWUsIGV4cE5hbWUpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuYWRkRmlsZSA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICB2YXIgcGFyc2VkID0gcGFyYW0ucGFyc2VkO1xuICAgIHZhciBncm91cGVkID0gcGFyYW0uZ3JvdXBlZDtcbiAgICB2YXIgdmlzaWJsZSA9IHBhcmFtLnZpc2libGU7XG4gICAgdmFyIHZpc2libGVmID0gcGFyYW0udmlzaWJsZWY7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LmFkZEZpbGUoZmlsZU5hbWUscGFyc2VkLHZpc2libGUsZ3JvdXBlZCwgdmlzaWJsZWYpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVtb3ZlRmlsZSA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgZmlsZU5hbWUgPSBwYXJhbS5maWxlTmFtZTtcbiAgICByZXR1cm4gZXhwZXJpbWVudGFsRGF0YU92ZXJsYXkucmVtb3ZlRmlsZShmaWxlTmFtZSk7XG4gIH1cblxuICB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucy5yZW1vdmVBbGwgPSBmdW5jdGlvbihwYXJhbSl7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnJlbW92ZUFsbCgpO1xuICB9XG5cbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMucmVzdG9yZUFsbCA9IGZ1bmN0aW9uKHBhcmFtKXtcbiAgICB2YXIgcGFyc2VkID0gcGFyYW0ucGFyc2VkO1xuICAgIHZhciBncm91cGVkID0gcGFyYW0uZ3JvdXBlZDtcbiAgICB2YXIgdmlzaWJsZSA9IHBhcmFtLnZpc2libGU7XG4gICAgdmFyIHZpc2libGVmID0gcGFyYW0udmlzaWJsZWY7XG4gICAgcmV0dXJuIGV4cGVyaW1lbnRhbERhdGFPdmVybGF5LnJlc3RvcmVBbGwocGFyc2VkLHZpc2libGUsZ3JvdXBlZCx2aXNpYmxlZilcbiAgfVxuICBcbiAgdW5kb1JlZG9BY3Rpb25GdW5jdGlvbnMuc2V0Q29tcG91bmRQYWRkaW5nID0gZnVuY3Rpb24obmV3UGFkZGluZykge1xuICAgIHZhciByZXN1bHQgPSBtYWluVXRpbGl0aWVzLmdldENvbXBvdW5kUGFkZGluZygpOyAgIFxuICAgIG1haW5VdGlsaXRpZXMuc2V0Q29tcG91bmRQYWRkaW5nKG5ld1BhZGRpbmcpOyAgIFxuICAgIFxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07IFxuXG4gIHJldHVybiB1bmRvUmVkb0FjdGlvbkZ1bmN0aW9ucztcbn07XG4iLCIvKlxuKiBMb29rdXAgb2JqZWN0IGZvciB2YWxpZCBtYXAgcHJvcGVydGllcy5cbiogSW4gdGhlIGZ1dHVyZSBpdCBjb3VsZCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIHNpbWlsYXIgcHJvcGVydGllcy9mdW5jdGlvbnMgaW4gYSBuZXcgZmlsZS5cbiovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29tcG91bmRQYWRkaW5nOiB0cnVlLFxuICBleHRyYUNvbXBhcnRtZW50UGFkZGluZzogdHJ1ZSxcbiAgZXh0cmFDb21wbGV4UGFkZGluZzogdHJ1ZSxcbiAgYXJyb3dTY2FsZTogdHJ1ZSxcbiAgc2hvd0NvbXBsZXhOYW1lOiB0cnVlLFxuICBkeW5hbWljTGFiZWxTaXplOiB0cnVlLFxuICBpbmZlck5lc3RpbmdPbkxvYWQ6IHRydWUsXG4gIGZpdExhYmVsc1RvTm9kZXM6IHRydWUsXG4gIGZpdExhYmVsc1RvSW5mb2JveGVzOiB0cnVlLFxuICByZWNhbGN1bGF0ZUxheW91dE9uQ29tcGxleGl0eU1hbmFnZW1lbnQ6IHRydWUsXG4gIHJlYXJyYW5nZU9uQ29tcGxleGl0eU1hbmFnZW1lbnQ6IHRydWUsXG4gIGFuaW1hdGVPbkRyYXdpbmdDaGFuZ2VzOiB0cnVlLFxuICBhZGp1c3ROb2RlTGFiZWxGb250U2l6ZUF1dG9tYXRpY2FsbHk6IHRydWUsXG4gIGVuYWJsZVBvcnRzOiB0cnVlLFxuICBhbGxvd0NvbXBvdW5kTm9kZVJlc2l6ZTogdHJ1ZSxcbiAgbWFwQ29sb3JTY2hlbWU6IHRydWUsXG4gIG1hcENvbG9yU2NoZW1lU3R5bGU6IHRydWUsXG4gIG1hcE5hbWU6IHRydWUsXG4gIG1hcERlc2NyaXB0aW9uOiB0cnVlLFxuICBlbmFibGVTSUZUb3BvbG9neUdyb3VwaW5nOiB0cnVlLFxuICBleHBlcmltZW50RGVzY3JpcHRpb246IHRydWVcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJjb25zb2xlLWJyb3dzZXJpZnlcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImxpYnNiZ24uanNcIik7OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInByZXR0eS1kYXRhXCIpOzsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ4bWwyanNcIik7OyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oXCIuL3NyYy9pbmRleC5qc1wiKTtcbiJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/src/sbgn-extensions/sbgn-cy-renderer.js b/src/sbgn-extensions/sbgn-cy-renderer.js index 8510748d..c97b6e29 100644 --- a/src/sbgn-extensions/sbgn-cy-renderer.js +++ b/src/sbgn-extensions/sbgn-cy-renderer.js @@ -136,7 +136,7 @@ module.exports = function () { }; var sbgnShapes = $$.sbgn.sbgnShapes = { - 'source and sink': true, + 'empty set': true, 'nucleic acid feature': true, 'complex': true, 'macromolecule': true, @@ -470,7 +470,7 @@ module.exports = function () { }; cyStyleProperties.types.nodeShape.enums.push( - 'source and sink', 'nucleic acid feature', 'complex', 'macromolecule', + 'empty set', 'nucleic acid feature', 'complex', 'macromolecule', 'simple chemical', 'biological activity', 'compartment' ); @@ -606,7 +606,7 @@ module.exports = function () { } var shapeNames = [ "simple chemical", "macromolecule", "complex", - "nucleic acid feature", "source and sink", "biological activity", + "nucleic acid feature", "empty set", "biological activity", "compartment", "oldCompartment" ]; @@ -695,7 +695,7 @@ module.exports = function () { "macromolecule": $$.sbgn.drawRoundRectangle, "complex": $$.sbgn.drawComplex, "nucleic acid feature": $$.sbgn.drawBottomRoundRectangle, - "source and sink": $$.sbgn.drawEllipse, + "empty set": $$.sbgn.drawEllipse, "biological activity": $$.sbgn.drawBiologicalActivity, "compartment": $$.sbgn.drawBarrel, "oldCompartment": $$.sbgn.drawRoundRectangle @@ -703,9 +703,9 @@ module.exports = function () { // To define an extra drawing for the node that is rendered at the very end, // even after the node background image is drawn. - // E.g. cross lines of "source and sink" nodes. + // E.g. cross lines of "empty set" nodes. $$.sbgn.extraDraw = { - "source and sink": $$.sbgn.drawCrossLine + "empty set": $$.sbgn.drawCrossLine }; $$.sbgn.plainIntersectLine = { @@ -727,7 +727,7 @@ module.exports = function () { "nucleic acid feature": function( centerX, centerY, width, height, x, y, padding ) { return cyBaseNodeShapes["bottomroundrectangle"].intersectLine( centerX, centerY, width, height, x, y, padding ); }, - "source and sink": function( centerX, centerY, width, height, x, y, padding ) { + "empty set": function( centerX, centerY, width, height, x, y, padding ) { return cyBaseNodeShapes["ellipse"].intersectLine( centerX, centerY, width, height, x, y, padding ); }, "biological activity": function( centerX, centerY, width, height, x, y, padding ) { @@ -822,7 +822,7 @@ module.exports = function () { "nucleic acid feature": function( x, y, padding, width, height, centerX, centerY ) { return cyBaseNodeShapes["bottomroundrectangle"].checkPoint( x, y, padding, width, height, centerX, centerY ); }, - "source and sink": function( x, y, padding, width, height, centerX, centerY ) { + "empty set": function( x, y, padding, width, height, centerX, centerY ) { return cyBaseNodeShapes["ellipse"].checkPoint( x, y, padding, width, height, centerX, centerY ); }, "biological activity": function( x, y, padding, width, height, centerX, centerY ) { diff --git a/src/utilities/element-utilities-factory.js b/src/utilities/element-utilities-factory.js index 82e0e723..26d3287d 100644 --- a/src/utilities/element-utilities-factory.js +++ b/src/utilities/element-utilities-factory.js @@ -92,7 +92,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {isAllowed: true}, asTarget: {}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {}}, - "source and sink": {asSource: {isAllowed: true}, asTarget: {}}, + "empty set": {asSource: {isAllowed: true}, asTarget: {}}, "perturbing agent": {asSource: {}, asTarget: {}}, "submap": {asSource: {}, asTarget: {}}, "process": {asSource: {}, asTarget: {isAllowed: true}}, @@ -113,7 +113,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {}, asTarget: {isAllowed: true}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {}}, - "source and sink": {asSource: {}, asTarget: {isAllowed: true}}, + "empty set": {asSource: {}, asTarget: {isAllowed: true}}, "perturbing agent": {asSource: {}, asTarget: {}}, "submap": {asSource: {}, asTarget: {}}, "process": {asSource: {isAllowed: true}, asTarget: {}}, @@ -134,7 +134,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {isAllowed: true}, asTarget: {}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {}}, - "source and sink": {asSource: {isAllowed: true}, asTarget: {}}, + "empty set": {asSource: {isAllowed: true}, asTarget: {}}, "perturbing agent": {asSource: {isAllowed: true}, asTarget: {}}, "submap": {asSource: {}, asTarget: {}}, "process": {asSource: {}, asTarget: {isAllowed: true}}, @@ -155,7 +155,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {isAllowed: true}, asTarget: {}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {}}, - "source and sink": {asSource: {isAllowed: true}, asTarget: {}}, + "empty set": {asSource: {isAllowed: true}, asTarget: {}}, "perturbing agent": {asSource: {isAllowed: true}, asTarget: {}}, "submap": {asSource: {}, asTarget: {}}, "process": {asSource: {}, asTarget: {isAllowed: true}}, @@ -176,7 +176,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {}, asTarget: {}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {}}, - "source and sink": {asSource: {isAllowed: true}, asTarget: {}}, + "empty set": {asSource: {isAllowed: true}, asTarget: {}}, "perturbing agent": {asSource: {}, asTarget: {}}, "submap": {asSource: {}, asTarget: {}}, "process": {asSource: {}, asTarget: {isAllowed: true, maxEdge: 1}}, @@ -197,7 +197,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {isAllowed: true}, asTarget: {}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {}}, - "source and sink": {asSource: {isAllowed: true}, asTarget: {}}, + "empty set": {asSource: {isAllowed: true}, asTarget: {}}, "perturbing agent": {asSource: {isAllowed: true}, asTarget: {}}, "submap": {asSource: {}, asTarget: {}}, "process": {asSource: {}, asTarget: {isAllowed: true}}, @@ -218,7 +218,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {isAllowed: true}, asTarget: {}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {}}, - "source and sink": {asSource: {isAllowed: true}, asTarget: {}}, + "empty set": {asSource: {isAllowed: true}, asTarget: {}}, "perturbing agent": {asSource: {isAllowed: true}, asTarget: {}}, "submap": {asSource: {}, asTarget: {}}, "process": {asSource: {}, asTarget: {isAllowed: true, maxEdge: 1}}, @@ -239,7 +239,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {isAllowed: true}, asTarget: {}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {}}, - "source and sink": {asSource: {isAllowed: true}, asTarget: {}}, + "empty set": {asSource: {isAllowed: true}, asTarget: {}}, "perturbing agent": {asSource: {}, asTarget: {}}, "submap": {asSource: {}, asTarget: {}}, "process": {asSource: {}, asTarget: {}}, @@ -260,7 +260,7 @@ module.exports = function () { "nucleic acid feature": {asSource: {isAllowed: true}, asTarget: {}}, "compartment": {asSource: {}, asTarget: {}}, "tag": {asSource: {}, asTarget: {isAllowed: true}}, - "source and sink": {asSource: {}, asTarget: {}}, + "empty set": {asSource: {}, asTarget: {}}, "perturbing agent": {asSource: {}, asTarget: {}}, "submap": {asSource: {}, asTarget: {isAllowed: true}}, "process": {asSource: {}, asTarget: {}}, @@ -464,7 +464,7 @@ module.exports = function () { 'BA simple chemical', 'BA macromolecule', 'BA nucleic acid feature', 'BA perturbing agent', 'BA complex']; elementUtilities.epnTypes = ['macromolecule', 'nucleic acid feature', 'simple chemical', - 'source and sink', 'unspecified entity', 'perturbing agent', 'complex', + 'empty set', 'unspecified entity', 'perturbing agent', 'complex', 'nucleic acid feature multimer', 'macromolecule multimer', 'simple chemical multimer', 'complex multimer']; elementUtilities.sifTypes = ['SIF macromolecule', 'SIF simple chemical']; elementUtilities.otherNodeTypes = ['compartment', 'tag', 'submap', 'topology group']; @@ -614,7 +614,7 @@ module.exports = function () { var sbgnclass = elementUtilities.getPureSbgnClass( ele ); return sbgnclass != 'and' && sbgnclass != 'or' && sbgnclass != 'not' && sbgnclass != 'delay' - && sbgnclass != 'association' && sbgnclass != 'dissociation' && sbgnclass != 'source and sink' && !sbgnclass.endsWith('process'); + && sbgnclass != 'association' && sbgnclass != 'dissociation' && sbgnclass != 'empty set' && !sbgnclass.endsWith('process'); }; // Returns whether the give element have unit of information @@ -656,7 +656,7 @@ module.exports = function () { elementUtilities.mustBeSquare = function (ele) { var sbgnclass = elementUtilities.getPureSbgnClass( ele ); - return (sbgnclass.indexOf('process') != -1 || sbgnclass == 'source and sink' + return (sbgnclass.indexOf('process') != -1 || sbgnclass == 'empty set' || sbgnclass == 'and' || sbgnclass == 'or' || sbgnclass == 'not' || sbgnclass == 'association' || sbgnclass == 'dissociation' || sbgnclass == 'delay'); }; @@ -745,10 +745,10 @@ module.exports = function () { return inArray( sbgnclass, elementUtilities.processTypes ); }; - // Returns wether the given element or string is of the special empty set/source and sink class + // Returns wether the given element or string is of the special empty set/empty set class elementUtilities.isEmptySetClass = function (ele) { var sbgnclass = elementUtilities.getPureSbgnClass( ele ); - return sbgnclass == 'source and sink'; + return sbgnclass == 'empty set'; }; // Returns whether the given element is a logical operator @@ -1068,7 +1068,7 @@ module.exports = function () { } // We need to define new node shapes with their class names for these nodes - if (_class == 'source and sink' || _class == 'nucleic acid feature' || _class == 'macromolecule' + if (_class == 'empty set' || _class == 'nucleic acid feature' || _class == 'macromolecule' || _class == 'simple chemical' || _class == 'complex' || _class == 'biological activity' ) { return _class; } @@ -2323,7 +2323,7 @@ module.exports = function () { width: 30, height: 30 }, - 'source and sink': { + 'empty set': { width: 22, height: 22 },